Fix + massively improve the leaderboards script/menu
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Numerics;
|
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@@ -22,99 +21,36 @@ public class LeaderboardsMenu : MonoBehaviour
|
|||||||
[SerializeField] private Button selectionLegacyButton;
|
[SerializeField] private Button selectionLegacyButton;
|
||||||
[SerializeField] private Button selectionTotalBerriesButton;
|
[SerializeField] private Button selectionTotalBerriesButton;
|
||||||
|
|
||||||
[SerializeField] private GameObject scorePanel;
|
[SerializeField] private GameObject scoresPanel;
|
||||||
[SerializeField] private GameObject scoreContent;
|
[SerializeField] private GameObject content;
|
||||||
[SerializeField] private GameObject scoreSampleObject;
|
[SerializeField] private GameObject sampleObject;
|
||||||
|
|
||||||
[SerializeField] private GameObject berryPanel;
|
|
||||||
[SerializeField] private GameObject berryContent;
|
|
||||||
[SerializeField] private TMP_Dropdown berryShowTypeDropdown;
|
[SerializeField] private TMP_Dropdown berryShowTypeDropdown;
|
||||||
[SerializeField] private GameObject berrySampleObject;
|
|
||||||
|
|
||||||
[SerializeField] private GameObject coinPanel;
|
private int mode = -1;
|
||||||
[SerializeField] private GameObject coinContent;
|
|
||||||
[SerializeField] private GameObject coinSampleObject;
|
|
||||||
|
|
||||||
[SerializeField] private GameObject legacyPanel;
|
|
||||||
[SerializeField] private GameObject legacyContent;
|
|
||||||
[SerializeField] private GameObject legacySampleObject;
|
|
||||||
|
|
||||||
[SerializeField] private GameObject totalBerriesPanel;
|
|
||||||
[SerializeField] private GameObject totalBerriesContent;
|
|
||||||
[SerializeField] private GameObject totalBerriesSampleObject;
|
|
||||||
|
|
||||||
void Awake()
|
void Awake()
|
||||||
{
|
{
|
||||||
selectionScoreButton.onClick.AddListener(() => SwitchMenu(1));
|
selectionScoreButton.onClick.AddListener(() => { mode = 0; SwitchMenu(1); });
|
||||||
selectionBerryButton.onClick.AddListener(() => SwitchMenu(2));
|
selectionBerryButton.onClick.AddListener(() => { mode = 1; SwitchMenu(1); });
|
||||||
selectionCoinButton.onClick.AddListener(() => SwitchMenu(3));
|
selectionCoinButton.onClick.AddListener(() => { mode = 2; SwitchMenu(1); });
|
||||||
selectionLegacyButton.onClick.AddListener(() => SwitchMenu(4));
|
selectionLegacyButton.onClick.AddListener(() => { mode = 3; SwitchMenu(1); });
|
||||||
selectionTotalBerriesButton.onClick.AddListener(() => SwitchMenu(5));
|
selectionTotalBerriesButton.onClick.AddListener(() => { mode = 4; SwitchMenu(1); });
|
||||||
|
berryShowTypeDropdown.onValueChanged.AddListener(_ => GetTopPlayers());
|
||||||
berryShowTypeDropdown.onValueChanged.AddListener(value => GetTopPlayersBerry(value));
|
|
||||||
|
|
||||||
|
|
||||||
backButton.onClick.AddListener(async () =>
|
backButton.onClick.AddListener(async () =>
|
||||||
{
|
{
|
||||||
if (selectionPanel.activeSelf) await SceneManager.LoadSceneAsync("MainMenu");
|
if (selectionPanel.activeSelf) await SceneManager.LoadSceneAsync("MainMenu");
|
||||||
else if (scorePanel.activeSelf || berryPanel.activeSelf || coinPanel.activeSelf || legacyPanel.activeSelf || totalBerriesPanel.activeSelf) SwitchMenu(0);
|
else if (scoresPanel.activeSelf) SwitchMenu(0);
|
||||||
});
|
|
||||||
refreshButton.onClick.AddListener(() =>
|
|
||||||
{
|
|
||||||
if (scorePanel.activeSelf) GetTopPlayersScore();
|
|
||||||
else if (berryPanel.activeSelf) GetTopPlayersBerry(berryShowTypeDropdown.value);
|
|
||||||
else if (coinPanel.activeSelf) GetTopPlayersCoin();
|
|
||||||
else if (legacyPanel.activeSelf) GetTopPlayersLegacy();
|
|
||||||
else if (totalBerriesPanel.activeSelf) GetTopPlayersTotalBerries();
|
|
||||||
});
|
});
|
||||||
|
refreshButton.onClick.AddListener(GetTopPlayers);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SwitchMenu(int menu)
|
void SwitchMenu(int menu)
|
||||||
{
|
{
|
||||||
UpdateStatus(false, "");
|
UpdateStatus(false, "");
|
||||||
if (scorePanel.activeSelf)
|
if (!selectionPanel.activeSelf)
|
||||||
{
|
{
|
||||||
foreach (Transform item in scoreContent.transform)
|
foreach (Transform item in content.transform)
|
||||||
{
|
|
||||||
if (item.gameObject.activeSelf)
|
|
||||||
{
|
|
||||||
Destroy(item.gameObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (berryPanel.activeSelf)
|
|
||||||
{
|
|
||||||
foreach (Transform item in berryContent.transform)
|
|
||||||
{
|
|
||||||
if (item.gameObject.activeSelf)
|
|
||||||
{
|
|
||||||
Destroy(item.gameObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (coinPanel.activeSelf)
|
|
||||||
{
|
|
||||||
foreach (Transform item in coinContent.transform)
|
|
||||||
{
|
|
||||||
if (item.gameObject.activeSelf)
|
|
||||||
{
|
|
||||||
Destroy(item.gameObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (legacyPanel.activeSelf)
|
|
||||||
{
|
|
||||||
foreach (Transform item in legacyContent.transform)
|
|
||||||
{
|
|
||||||
if (item.gameObject.activeSelf)
|
|
||||||
{
|
|
||||||
Destroy(item.gameObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (totalBerriesPanel.activeSelf)
|
|
||||||
{
|
|
||||||
foreach (Transform item in totalBerriesContent.transform)
|
|
||||||
{
|
{
|
||||||
if (item.gameObject.activeSelf)
|
if (item.gameObject.activeSelf)
|
||||||
{
|
{
|
||||||
@@ -123,81 +59,30 @@ public class LeaderboardsMenu : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (menu)
|
if (menu == 0)
|
||||||
{
|
{
|
||||||
case 0:
|
mode = -1;
|
||||||
refreshButton.gameObject.SetActive(false);
|
refreshButton.gameObject.SetActive(false);
|
||||||
selectionPanel.SetActive(true);
|
selectionPanel.SetActive(true);
|
||||||
scorePanel.SetActive(false);
|
scoresPanel.SetActive(false);
|
||||||
berryPanel.SetActive(false);
|
}
|
||||||
coinPanel.SetActive(false);
|
else if (menu == 1)
|
||||||
legacyPanel.SetActive(false);
|
{
|
||||||
totalBerriesPanel.SetActive(false);
|
refreshButton.transform.localPosition = mode == 1 ? new Vector2(402.5f, 282.33f) : new Vector2(-402.5f, -282.33f);
|
||||||
break;
|
refreshButton.gameObject.SetActive(true);
|
||||||
case 1:
|
berryShowTypeDropdown.gameObject.SetActive(mode == 1);
|
||||||
refreshButton.transform.localPosition = new UnityEngine.Vector2(-402.5f, -282.33f);
|
berryShowTypeDropdown.value = 0;
|
||||||
refreshButton.gameObject.SetActive(true);
|
selectionPanel.SetActive(false);
|
||||||
GetTopPlayersScore();
|
scoresPanel.SetActive(true);
|
||||||
selectionPanel.SetActive(false);
|
GetTopPlayers();
|
||||||
scorePanel.SetActive(true);
|
|
||||||
berryPanel.SetActive(false);
|
|
||||||
coinPanel.SetActive(false);
|
|
||||||
legacyPanel.SetActive(false);
|
|
||||||
totalBerriesPanel.SetActive(false);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
refreshButton.transform.localPosition = new UnityEngine.Vector2(402.5f, 282.33f);
|
|
||||||
refreshButton.gameObject.SetActive(true);
|
|
||||||
berryShowTypeDropdown.value = 0;
|
|
||||||
GetTopPlayersBerry(0);
|
|
||||||
selectionPanel.SetActive(false);
|
|
||||||
scorePanel.SetActive(false);
|
|
||||||
berryPanel.SetActive(true);
|
|
||||||
coinPanel.SetActive(false);
|
|
||||||
legacyPanel.SetActive(false);
|
|
||||||
totalBerriesPanel.SetActive(false);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
refreshButton.transform.localPosition = new UnityEngine.Vector2(-402.5f, -282.33f);
|
|
||||||
refreshButton.gameObject.SetActive(true);
|
|
||||||
GetTopPlayersCoin();
|
|
||||||
selectionPanel.SetActive(false);
|
|
||||||
scorePanel.SetActive(false);
|
|
||||||
berryPanel.SetActive(false);
|
|
||||||
coinPanel.SetActive(true);
|
|
||||||
legacyPanel.SetActive(false);
|
|
||||||
totalBerriesPanel.SetActive(false);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
refreshButton.transform.localPosition = new UnityEngine.Vector2(-402.5f, -282.33f);
|
|
||||||
refreshButton.gameObject.SetActive(true);
|
|
||||||
GetTopPlayersLegacy();
|
|
||||||
selectionPanel.SetActive(false);
|
|
||||||
scorePanel.SetActive(false);
|
|
||||||
berryPanel.SetActive(false);
|
|
||||||
coinPanel.SetActive(false);
|
|
||||||
legacyPanel.SetActive(true);
|
|
||||||
totalBerriesPanel.SetActive(false);
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
refreshButton.transform.localPosition = new UnityEngine.Vector2(-402.5f, -282.33f);
|
|
||||||
refreshButton.gameObject.SetActive(true);
|
|
||||||
GetTopPlayersTotalBerries();
|
|
||||||
selectionPanel.SetActive(false);
|
|
||||||
scorePanel.SetActive(false);
|
|
||||||
berryPanel.SetActive(false);
|
|
||||||
coinPanel.SetActive(false);
|
|
||||||
legacyPanel.SetActive(false);
|
|
||||||
totalBerriesPanel.SetActive(true);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async void GetTopPlayersScore()
|
async void GetTopPlayers()
|
||||||
{
|
{
|
||||||
backButton.interactable = false;
|
backButton.interactable = false;
|
||||||
refreshButton.interactable = false;
|
refreshButton.interactable = false;
|
||||||
foreach (Transform item in scoreContent.transform)
|
foreach (Transform item in content.transform)
|
||||||
{
|
{
|
||||||
if (item.gameObject.activeSelf)
|
if (item.gameObject.activeSelf)
|
||||||
{
|
{
|
||||||
@@ -205,7 +90,15 @@ public class LeaderboardsMenu : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
UpdateStatus(true, "Loading...");
|
UpdateStatus(true, "Loading...");
|
||||||
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LEADERBOARDS_SCORE_ENDPOINT);
|
using UnityWebRequest request = UnityWebRequest.Get(mode == 0
|
||||||
|
? Endpoints.LEADERBOARDS_SCORE_ENDPOINT
|
||||||
|
: mode == 1
|
||||||
|
? Endpoints.LEADERBOARDS_BERRY_ENDPOINT + "?berry=" + berryShowTypeDropdown.value
|
||||||
|
: mode == 2
|
||||||
|
? Endpoints.LEADERBOARDS_COIN_ENDPOINT
|
||||||
|
: mode == 3
|
||||||
|
? Endpoints.LEADERBOARDS_LEGACY_ENDPOINT
|
||||||
|
: Endpoints.LEADERBOARDS_TOTAL_ENDPOINT);
|
||||||
request.SetRequestHeader("Requester", "BerryDashClient");
|
request.SetRequestHeader("Requester", "BerryDashClient");
|
||||||
request.SetRequestHeader("ClientVersion", Application.version);
|
request.SetRequestHeader("ClientVersion", Application.version);
|
||||||
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
||||||
@@ -219,481 +112,50 @@ public class LeaderboardsMenu : MonoBehaviour
|
|||||||
var jsonResponse = JObject.Parse(response);
|
var jsonResponse = JObject.Parse(response);
|
||||||
if ((bool)jsonResponse["success"])
|
if ((bool)jsonResponse["success"])
|
||||||
{
|
{
|
||||||
var entries = (JObject)jsonResponse["data"];
|
foreach (var entry in jsonResponse["data"].ToObject<LeaderboardEntry[]>())
|
||||||
foreach (var prop in entries.Properties())
|
|
||||||
{
|
{
|
||||||
JObject entry = (JObject)prop.Value;
|
var entryInfo = Instantiate(sampleObject, content.transform);
|
||||||
var username = (string)entry["username"];
|
|
||||||
var highScore = BigInteger.Parse((string)entry["value"]);
|
|
||||||
var icon = (int)entry["icon"];
|
|
||||||
var overlay = (int)entry["overlay"];
|
|
||||||
var uid = BigInteger.Parse(prop.Name);
|
|
||||||
var birdColor = (JArray)entry["birdColor"];
|
|
||||||
var overlayColor = (JArray)entry["overlayColor"];
|
|
||||||
var customIcon = (string)entry["customIcon"];
|
|
||||||
|
|
||||||
var entryInfo = Instantiate(scoreSampleObject, scoreContent.transform);
|
|
||||||
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
|
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
|
||||||
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
|
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
|
||||||
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
|
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
|
||||||
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
|
var playerOverlay = playerIcon.transform.GetChild(0).GetComponent<Image>();
|
||||||
var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
|
var scoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
|
||||||
|
|
||||||
usernameText.text = $"{username} (#{uid + 1})";
|
usernameText.text = $"{entry.Username} (#{entry.UserID + 1})";
|
||||||
highScoreText.text += Tools.FormatWithCommas(highScore);
|
scoreText.text = (mode == 2 ? "Coins: " : "Berries: ") + Tools.FormatWithCommas(entry.Value);
|
||||||
|
|
||||||
if (BazookaManager.Instance.GetAccountID() == uid)
|
if (BazookaManager.Instance.GetAccountID() == entry.UserID)
|
||||||
{
|
{
|
||||||
usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
|
usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
|
||||||
highScoreText.text = $"<color=#7FFFD4>{highScoreText.text}</color>";
|
scoreText.text = $"<color=#7FFFD4>{scoreText.text}</color>";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (customIcon == null)
|
if (entry.CustomIcon == null)
|
||||||
{
|
{
|
||||||
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
|
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + entry.Icon);
|
||||||
if (icon == 1) playerIcon.sprite = Tools.GetIconForUser(uid);
|
if (entry.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(entry.UserID);
|
||||||
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
|
playerOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + entry.Overlay);
|
||||||
if (overlay != 0) playerOverlayIcon.gameObject.SetActive(true);
|
if (entry.Overlay != 0) playerOverlay.gameObject.SetActive(true);
|
||||||
if (overlay == 8) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
|
if (entry.Overlay == 8) playerOverlay.transform.localPosition = new Vector2(-16.56f, 14.81f);
|
||||||
else if (overlay == 11) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
|
else if (entry.Overlay == 11) playerOverlay.transform.localPosition = new Vector2(-14.74451f, 20.39122f);
|
||||||
else if (overlay == 13) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
|
else if (entry.Overlay == 13) playerOverlay.transform.localPosition = new Vector2(-16.54019f, 14.70365f);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
|
playerIcon.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
|
||||||
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
|
playerOverlay.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
playerIcon.color = Color.white;
|
playerIcon.color = Color.white;
|
||||||
playerOverlayIcon.color = Color.white;
|
playerOverlay.color = Color.white;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = customIcon;
|
else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = entry.CustomIcon;
|
||||||
playerIconButton.onClick.AddListener(async () =>
|
playerIconButton.onClick.AddListener(async () =>
|
||||||
{
|
{
|
||||||
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
|
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
|
||||||
clone.SetActive(true);
|
clone.SetActive(true);
|
||||||
await clone.GetComponent<ProfileMenu>().Init(uid);
|
await clone.GetComponent<ProfileMenu>().Init(entry.UserID);
|
||||||
});
|
|
||||||
entryInfo.SetActive(true);
|
|
||||||
}
|
|
||||||
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdateStatus(true, (string)jsonResponse["message"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
UpdateStatus(true, "Failed to fetch leaderboard stats: " + e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdateStatus(true, "Failed to fetch leaderboard stats");
|
|
||||||
}
|
|
||||||
backButton.interactable = true;
|
|
||||||
refreshButton.interactable = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
async void GetTopPlayersBerry(int showAmount)
|
|
||||||
{
|
|
||||||
berryShowTypeDropdown.interactable = false;
|
|
||||||
backButton.interactable = false;
|
|
||||||
refreshButton.interactable = false;
|
|
||||||
foreach (Transform item in berryContent.transform)
|
|
||||||
{
|
|
||||||
if (item.gameObject.activeSelf)
|
|
||||||
{
|
|
||||||
Destroy(item.gameObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
UpdateStatus(true, "Loading...");
|
|
||||||
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LEADERBOARDS_BERRY_ENDPOINT + "?berry=" + showAmount.ToString());
|
|
||||||
request.SetRequestHeader("Requester", "BerryDashClient");
|
|
||||||
request.SetRequestHeader("ClientVersion", Application.version);
|
|
||||||
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
|
||||||
await request.SendWebRequest();
|
|
||||||
if (request.result == UnityWebRequest.Result.Success)
|
|
||||||
{
|
|
||||||
UpdateStatus(false);
|
|
||||||
string response = request.downloadHandler.text;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var jsonResponse = JObject.Parse(response);
|
|
||||||
if ((bool)jsonResponse["success"])
|
|
||||||
{
|
|
||||||
var entries = (JObject)jsonResponse["data"];
|
|
||||||
foreach (var prop in entries.Properties())
|
|
||||||
{
|
|
||||||
JObject entry = (JObject)prop.Value;
|
|
||||||
var username = (string)entry["username"];
|
|
||||||
var highScore = BigInteger.Parse((string)entry["value"]);
|
|
||||||
var icon = (int)entry["icon"];
|
|
||||||
var overlay = (int)entry["overlay"];
|
|
||||||
var uid = BigInteger.Parse(prop.Name);
|
|
||||||
var birdColor = (JArray)entry["birdColor"];
|
|
||||||
var overlayColor = (JArray)entry["overlayColor"];
|
|
||||||
var customIcon = (string)entry["customIcon"];
|
|
||||||
|
|
||||||
var entryInfo = Instantiate(berrySampleObject, berryContent.transform);
|
|
||||||
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
|
|
||||||
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
|
|
||||||
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
|
|
||||||
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
|
|
||||||
var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
|
|
||||||
|
|
||||||
usernameText.text = $"{username} (#{uid + 1})";
|
|
||||||
highScoreText.text += Tools.FormatWithCommas(highScore);
|
|
||||||
|
|
||||||
if (BazookaManager.Instance.GetAccountID() == uid)
|
|
||||||
{
|
|
||||||
usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
|
|
||||||
highScoreText.text = $"<color=#7FFFD4>{highScoreText.text}</color>";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (customIcon == null)
|
|
||||||
{
|
|
||||||
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
|
|
||||||
if (icon == 1) playerIcon.sprite = Tools.GetIconForUser(uid);
|
|
||||||
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
|
|
||||||
if (overlay != 0) playerOverlayIcon.gameObject.SetActive(true);
|
|
||||||
if (overlay == 8) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
|
|
||||||
else if (overlay == 11) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
|
|
||||||
else if (overlay == 13) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
|
|
||||||
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
playerIcon.color = Color.white;
|
|
||||||
playerOverlayIcon.color = Color.white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = customIcon;
|
|
||||||
playerIconButton.onClick.AddListener(async () =>
|
|
||||||
{
|
|
||||||
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
|
|
||||||
clone.SetActive(true);
|
|
||||||
await clone.GetComponent<ProfileMenu>().Init(uid);
|
|
||||||
});
|
|
||||||
entryInfo.SetActive(true);
|
|
||||||
}
|
|
||||||
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdateStatus(true, (string)jsonResponse["message"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
UpdateStatus(true, "Failed to fetch leaderboard stats: " + e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdateStatus(true, "Failed to fetch leaderboard stats");
|
|
||||||
}
|
|
||||||
berryShowTypeDropdown.interactable = true;
|
|
||||||
backButton.interactable = true;
|
|
||||||
refreshButton.interactable = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
async void GetTopPlayersCoin()
|
|
||||||
{
|
|
||||||
backButton.interactable = false;
|
|
||||||
refreshButton.interactable = false;
|
|
||||||
foreach (Transform item in coinContent.transform)
|
|
||||||
{
|
|
||||||
if (item.gameObject.activeSelf)
|
|
||||||
{
|
|
||||||
Destroy(item.gameObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
UpdateStatus(true, "Loading...");
|
|
||||||
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LEADERBOARDS_COIN_ENDPOINT);
|
|
||||||
request.SetRequestHeader("Requester", "BerryDashClient");
|
|
||||||
request.SetRequestHeader("ClientVersion", Application.version);
|
|
||||||
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
|
||||||
await request.SendWebRequest();
|
|
||||||
if (request.result == UnityWebRequest.Result.Success)
|
|
||||||
{
|
|
||||||
UpdateStatus(false);
|
|
||||||
string response = request.downloadHandler.text;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var jsonResponse = JObject.Parse(response);
|
|
||||||
if ((bool)jsonResponse["success"])
|
|
||||||
{
|
|
||||||
var entries = (JObject)jsonResponse["data"];
|
|
||||||
foreach (var prop in entries.Properties())
|
|
||||||
{
|
|
||||||
JObject entry = (JObject)prop.Value;
|
|
||||||
var username = (string)entry["username"];
|
|
||||||
var highScore = BigInteger.Parse((string)entry["value"]);
|
|
||||||
var icon = (int)entry["icon"];
|
|
||||||
var overlay = (int)entry["overlay"];
|
|
||||||
var uid = BigInteger.Parse(prop.Name);
|
|
||||||
var birdColor = (JArray)entry["birdColor"];
|
|
||||||
var overlayColor = (JArray)entry["overlayColor"];
|
|
||||||
var customIcon = (string)entry["customIcon"];
|
|
||||||
|
|
||||||
var entryInfo = Instantiate(coinSampleObject, coinContent.transform);
|
|
||||||
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
|
|
||||||
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
|
|
||||||
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
|
|
||||||
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
|
|
||||||
var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
|
|
||||||
|
|
||||||
usernameText.text = $"{username} (#{uid + 1})";
|
|
||||||
highScoreText.text += Tools.FormatWithCommas(highScore);
|
|
||||||
|
|
||||||
if (BazookaManager.Instance.GetAccountID() == uid)
|
|
||||||
{
|
|
||||||
usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
|
|
||||||
highScoreText.text = $"<color=#7FFFD4>{highScoreText.text}</color>";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (customIcon == null)
|
|
||||||
{
|
|
||||||
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
|
|
||||||
if (icon == 1) playerIcon.sprite = Tools.GetIconForUser(uid);
|
|
||||||
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
|
|
||||||
if (overlay != 0) playerOverlayIcon.gameObject.SetActive(true);
|
|
||||||
if (overlay == 8) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
|
|
||||||
else if (overlay == 11) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
|
|
||||||
else if (overlay == 13) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
|
|
||||||
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
playerIcon.color = Color.white;
|
|
||||||
playerOverlayIcon.color = Color.white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = customIcon;
|
|
||||||
playerIconButton.onClick.AddListener(async () =>
|
|
||||||
{
|
|
||||||
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
|
|
||||||
clone.SetActive(true);
|
|
||||||
await clone.GetComponent<ProfileMenu>().Init(uid);
|
|
||||||
});
|
|
||||||
entryInfo.SetActive(true);
|
|
||||||
}
|
|
||||||
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdateStatus(true, (string)jsonResponse["message"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
UpdateStatus(true, "Failed to fetch leaderboard stats: " + e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdateStatus(true, "Failed to fetch leaderboard stats");
|
|
||||||
}
|
|
||||||
backButton.interactable = true;
|
|
||||||
refreshButton.interactable = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
async void GetTopPlayersLegacy()
|
|
||||||
{
|
|
||||||
backButton.interactable = false;
|
|
||||||
refreshButton.interactable = false;
|
|
||||||
foreach (Transform item in legacyContent.transform)
|
|
||||||
{
|
|
||||||
if (item.gameObject.activeSelf)
|
|
||||||
{
|
|
||||||
Destroy(item.gameObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
UpdateStatus(true, "Loading...");
|
|
||||||
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LEADERBOARDS_LEGACY_ENDPOINT);
|
|
||||||
request.SetRequestHeader("Requester", "BerryDashClient");
|
|
||||||
request.SetRequestHeader("ClientVersion", Application.version);
|
|
||||||
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
|
||||||
await request.SendWebRequest();
|
|
||||||
if (request.result == UnityWebRequest.Result.Success)
|
|
||||||
{
|
|
||||||
UpdateStatus(false);
|
|
||||||
string response = request.downloadHandler.text;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var jsonResponse = JObject.Parse(response);
|
|
||||||
if ((bool)jsonResponse["success"])
|
|
||||||
{
|
|
||||||
var entries = (JObject)jsonResponse["data"];
|
|
||||||
foreach (var prop in entries.Properties())
|
|
||||||
{
|
|
||||||
JObject entry = (JObject)prop.Value;
|
|
||||||
var username = (string)entry["username"];
|
|
||||||
var highScore = BigInteger.Parse((string)entry["value"]);
|
|
||||||
var icon = (int)entry["icon"];
|
|
||||||
var overlay = (int)entry["overlay"];
|
|
||||||
var uid = BigInteger.Parse(prop.Name);
|
|
||||||
var birdColor = (JArray)entry["birdColor"];
|
|
||||||
var overlayColor = (JArray)entry["overlayColor"];
|
|
||||||
var customIcon = (string)entry["customIcon"];
|
|
||||||
|
|
||||||
var entryInfo = Instantiate(legacySampleObject, legacyContent.transform);
|
|
||||||
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
|
|
||||||
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
|
|
||||||
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
|
|
||||||
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
|
|
||||||
var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
|
|
||||||
|
|
||||||
usernameText.text = $"{username} (#{uid + 1})";
|
|
||||||
highScoreText.text += Tools.FormatWithCommas(highScore);
|
|
||||||
|
|
||||||
if (BazookaManager.Instance.GetAccountID() == uid)
|
|
||||||
{
|
|
||||||
usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
|
|
||||||
highScoreText.text = $"<color=#7FFFD4>{highScoreText.text}</color>";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (customIcon == null)
|
|
||||||
{
|
|
||||||
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
|
|
||||||
if (icon == 1) playerIcon.sprite = Tools.GetIconForUser(uid);
|
|
||||||
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
|
|
||||||
if (overlay != 0) playerOverlayIcon.gameObject.SetActive(true);
|
|
||||||
if (overlay == 8) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
|
|
||||||
else if (overlay == 11) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
|
|
||||||
else if (overlay == 13) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
|
|
||||||
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
playerIcon.color = Color.white;
|
|
||||||
playerOverlayIcon.color = Color.white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = customIcon;
|
|
||||||
playerIconButton.onClick.AddListener(async () =>
|
|
||||||
{
|
|
||||||
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
|
|
||||||
clone.SetActive(true);
|
|
||||||
await clone.GetComponent<ProfileMenu>().Init(uid);
|
|
||||||
});
|
|
||||||
entryInfo.SetActive(true);
|
|
||||||
}
|
|
||||||
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdateStatus(true, (string)jsonResponse["message"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
UpdateStatus(true, "Failed to fetch leaderboard stats: " + e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdateStatus(true, "Failed to fetch leaderboard stats");
|
|
||||||
}
|
|
||||||
backButton.interactable = true;
|
|
||||||
refreshButton.interactable = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
async void GetTopPlayersTotalBerries()
|
|
||||||
{
|
|
||||||
backButton.interactable = false;
|
|
||||||
refreshButton.interactable = false;
|
|
||||||
foreach (Transform item in totalBerriesContent.transform)
|
|
||||||
{
|
|
||||||
if (item.gameObject.activeSelf)
|
|
||||||
{
|
|
||||||
Destroy(item.gameObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
UpdateStatus(true, "Loading...");
|
|
||||||
WWWForm dataForm = new();
|
|
||||||
dataForm.AddField("type", "4");
|
|
||||||
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LEADERBOARDS_TOTAL_ENDPOINT);
|
|
||||||
request.SetRequestHeader("Requester", "BerryDashClient");
|
|
||||||
request.SetRequestHeader("ClientVersion", Application.version);
|
|
||||||
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
|
||||||
await request.SendWebRequest();
|
|
||||||
if (request.result == UnityWebRequest.Result.Success)
|
|
||||||
{
|
|
||||||
UpdateStatus(false);
|
|
||||||
string response = request.downloadHandler.text;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var jsonResponse = JObject.Parse(response);
|
|
||||||
if ((bool)jsonResponse["success"])
|
|
||||||
{
|
|
||||||
var entries = (JObject)jsonResponse["data"];
|
|
||||||
foreach (var prop in entries.Properties())
|
|
||||||
{
|
|
||||||
JObject entry = (JObject)prop.Value;
|
|
||||||
var username = (string)entry["username"];
|
|
||||||
var highScore = BigInteger.Parse((string)entry["value"]);
|
|
||||||
var icon = (int)entry["icon"];
|
|
||||||
var overlay = (int)entry["overlay"];
|
|
||||||
var uid = BigInteger.Parse(prop.Name);
|
|
||||||
var birdColor = (JArray)entry["birdColor"];
|
|
||||||
var overlayColor = (JArray)entry["overlayColor"];
|
|
||||||
var customIcon = (string)entry["customIcon"];
|
|
||||||
|
|
||||||
var entryInfo = Instantiate(totalBerriesSampleObject, totalBerriesContent.transform);
|
|
||||||
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
|
|
||||||
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
|
|
||||||
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
|
|
||||||
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
|
|
||||||
var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
|
|
||||||
|
|
||||||
usernameText.text = $"{username} (#{uid + 1})";
|
|
||||||
highScoreText.text += Tools.FormatWithCommas(highScore);
|
|
||||||
|
|
||||||
if (BazookaManager.Instance.GetAccountID() == uid)
|
|
||||||
{
|
|
||||||
usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
|
|
||||||
highScoreText.text = $"<color=#7FFFD4>{highScoreText.text}</color>";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (customIcon == null)
|
|
||||||
{
|
|
||||||
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
|
|
||||||
if (icon == 1) playerIcon.sprite = Tools.GetIconForUser(uid);
|
|
||||||
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
|
|
||||||
if (overlay != 0) playerOverlayIcon.gameObject.SetActive(true);
|
|
||||||
if (overlay == 8) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
|
|
||||||
else if (overlay == 11) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
|
|
||||||
else if (overlay == 13) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
|
|
||||||
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
playerIcon.color = Color.white;
|
|
||||||
playerOverlayIcon.color = Color.white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = customIcon;
|
|
||||||
playerIconButton.onClick.AddListener(async () =>
|
|
||||||
{
|
|
||||||
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
|
|
||||||
clone.SetActive(true);
|
|
||||||
await clone.GetComponent<ProfileMenu>().Init(uid);
|
|
||||||
});
|
});
|
||||||
entryInfo.SetActive(true);
|
entryInfo.SetActive(true);
|
||||||
}
|
}
|
||||||
|
|||||||
39
Assets/Scripts/Types/LeaderboardEntry.cs
Normal file
39
Assets/Scripts/Types/LeaderboardEntry.cs
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
using System.Numerics;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using UnityEngine.Scripting;
|
||||||
|
|
||||||
|
[Preserve]
|
||||||
|
public class LeaderboardEntry
|
||||||
|
{
|
||||||
|
[Preserve]
|
||||||
|
[JsonProperty("id")]
|
||||||
|
public BigInteger UserID { get; set; }
|
||||||
|
|
||||||
|
[Preserve]
|
||||||
|
[JsonProperty("username")]
|
||||||
|
public string Username { get; set; }
|
||||||
|
|
||||||
|
[Preserve]
|
||||||
|
[JsonProperty("value")]
|
||||||
|
public BigInteger Value { get; set; }
|
||||||
|
|
||||||
|
[Preserve]
|
||||||
|
[JsonProperty("icon")]
|
||||||
|
public int Icon { get; set; }
|
||||||
|
|
||||||
|
[Preserve]
|
||||||
|
[JsonProperty("overlay")]
|
||||||
|
public int Overlay { get; set; }
|
||||||
|
|
||||||
|
[Preserve]
|
||||||
|
[JsonProperty("birdColor")]
|
||||||
|
public int[] BirdColor { get; set; }
|
||||||
|
|
||||||
|
[Preserve]
|
||||||
|
[JsonProperty("overlayColor")]
|
||||||
|
public int[] OverlayColor { get; set; }
|
||||||
|
|
||||||
|
[Preserve]
|
||||||
|
[JsonProperty("customIcon")]
|
||||||
|
public string CustomIcon { get; set; }
|
||||||
|
}
|
||||||
2
Assets/Scripts/Types/LeaderboardEntry.cs.meta
Normal file
2
Assets/Scripts/Types/LeaderboardEntry.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c59a6226bb2d44d36aeb40cf5340bbb9
|
||||||
Reference in New Issue
Block a user