using System; using System.Collections.Generic; using System.Numerics; using Newtonsoft.Json.Linq; using TMPro; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.Networking; using UnityEngine.SceneManagement; using UnityEngine.UI; public class LeaderboardsMenu : MonoBehaviour { [SerializeField] private TMP_Text statusText; [SerializeField] private Button backButton; [SerializeField] private Button refreshButton; [SerializeField] private ProfileMenu profilePrefab; [SerializeField] private GameObject selectionPanel; [SerializeField] private Button selectionScoreButton; [SerializeField] private Button selectionBerryButton; [SerializeField] private Button selectionCoinButton; [SerializeField] private Button selectionLegacyButton; [SerializeField] private Button selectionTotalBerriesButton; [SerializeField] private GameObject scorePanel; [SerializeField] private GameObject scoreContent; [SerializeField] private GameObject scoreSampleObject; [SerializeField] private GameObject berryPanel; [SerializeField] private GameObject berryContent; [SerializeField] private TMP_Dropdown berryShowTypeDropdown; [SerializeField] private GameObject berrySampleObject; [SerializeField] private GameObject coinPanel; [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; [SerializeField] private Dictionary customIcons; void Awake() { selectionScoreButton.onClick.AddListener(() => SwitchMenu(1)); selectionBerryButton.onClick.AddListener(() => SwitchMenu(2)); selectionCoinButton.onClick.AddListener(() => SwitchMenu(3)); selectionLegacyButton.onClick.AddListener(() => SwitchMenu(4)); selectionTotalBerriesButton.onClick.AddListener(() => SwitchMenu(5)); berryShowTypeDropdown.onValueChanged.AddListener(value => GetTopPlayersBerry(value)); backButton.onClick.AddListener(async () => { if (selectionPanel.activeSelf) await SceneManager.LoadSceneAsync("MainMenu"); else if (scorePanel.activeSelf || berryPanel.activeSelf || coinPanel.activeSelf || legacyPanel.activeSelf || totalBerriesPanel.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(); }); } void SwitchMenu(int menu) { UpdateStatus(false, ""); if (scorePanel.activeSelf) { foreach (Transform item in scoreContent.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) { Destroy(item.gameObject); } } } switch (menu) { case 0: refreshButton.gameObject.SetActive(false); selectionPanel.SetActive(true); scorePanel.SetActive(false); berryPanel.SetActive(false); coinPanel.SetActive(false); legacyPanel.SetActive(false); totalBerriesPanel.SetActive(false); break; case 1: refreshButton.transform.localPosition = new UnityEngine.Vector2(-402.5f, -282.33f); refreshButton.gameObject.SetActive(true); GetTopPlayersScore(); selectionPanel.SetActive(false); 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() { backButton.interactable = false; refreshButton.interactable = false; foreach (Transform item in scoreContent.transform) { if (item.gameObject.activeSelf) { Destroy(item.gameObject); } } UpdateStatus(true, "Loading..."); using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LEADERBOARDS_SCORE_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"]["entries"]; customIcons = jsonResponse["data"]["customIcons"].ToObject>(); 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(scoreSampleObject, scoreContent.transform); var usernameText = entryInfo.transform.GetChild(0).GetComponent(); var playerIcon = usernameText.transform.GetChild(0).GetComponent(); var playerIconButton = usernameText.transform.GetChild(0).GetComponent