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 scoresPanel; [SerializeField] private GameObject content; [SerializeField] private GameObject sampleObject; [SerializeField] private TMP_Dropdown berryShowTypeDropdown; private LeaderboardMode mode = LeaderboardMode.None; private bool changedByCode = false; void Awake() { selectionScoreButton.onClick.AddListener(() => { mode = LeaderboardMode.Score; SwitchMenu(1); }); selectionBerryButton.onClick.AddListener(() => { mode = LeaderboardMode.Berry; SwitchMenu(1); }); selectionCoinButton.onClick.AddListener(() => { mode = LeaderboardMode.Coin; SwitchMenu(1); }); selectionLegacyButton.onClick.AddListener(() => { mode = LeaderboardMode.Legacy; SwitchMenu(1); }); selectionTotalBerriesButton.onClick.AddListener(() => { mode = LeaderboardMode.TotalBerries; SwitchMenu(1); }); berryShowTypeDropdown.onValueChanged.AddListener(_ => GetTopPlayers()); backButton.onClick.AddListener(async () => { if (selectionPanel.activeSelf) await SceneManager.LoadSceneAsync("MainMenu"); else if (scoresPanel.activeSelf) SwitchMenu(0); }); refreshButton.onClick.AddListener(GetTopPlayers); } void SwitchMenu(int menu) { UpdateStatus(false, ""); if (!selectionPanel.activeSelf) { foreach (Transform item in content.transform) { if (item.gameObject.activeSelf) { Destroy(item.gameObject); } } } if (menu == 0) { mode = LeaderboardMode.None; refreshButton.gameObject.SetActive(false); selectionPanel.SetActive(true); scoresPanel.SetActive(false); } else if (menu == 1) { refreshButton.transform.localPosition = mode == LeaderboardMode.Berry ? new Vector2(402.5f, 282.33f) : new Vector2(-402.5f, -282.33f); refreshButton.gameObject.SetActive(true); berryShowTypeDropdown.gameObject.SetActive(mode == LeaderboardMode.Berry); changedByCode = true; berryShowTypeDropdown.value = 0; changedByCode = false; selectionPanel.SetActive(false); scoresPanel.SetActive(true); GetTopPlayers(); } } async void GetTopPlayers() { if (changedByCode) return; backButton.interactable = false; refreshButton.interactable = false; foreach (Transform item in content.transform) { if (item.gameObject.activeSelf) { Destroy(item.gameObject); } } UpdateStatus(true, "Loading..."); using UnityWebRequest request = UnityWebRequest.Get(mode == LeaderboardMode.Score ? Endpoints.LEADERBOARDS_SCORE_ENDPOINT : mode == LeaderboardMode.Berry ? Endpoints.LEADERBOARDS_BERRY_ENDPOINT + "?berry=" + berryShowTypeDropdown.value : mode == LeaderboardMode.Coin ? Endpoints.LEADERBOARDS_COIN_ENDPOINT : mode == LeaderboardMode.Legacy ? Endpoints.LEADERBOARDS_LEGACY_ENDPOINT : Endpoints.LEADERBOARDS_TOTAL_ENDPOINT); request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); await request.SendWebRequest(); if (request.downloadHandler.text == null) { UpdateStatus(true, "Failed to fetch leaderboard stats"); return; } UpdateStatus(false); var jsonResponse = JObject.Parse(request.downloadHandler.text); if ((bool)jsonResponse["success"]) { var entries = jsonResponse["data"].ToObject(); for (int i = 0; i < entries.Length; i++) { var entry = entries[i]; var entryInfo = Instantiate(sampleObject, content.transform); var usernameText = entryInfo.transform.GetChild(0).GetComponent(); var playerIcon = usernameText.transform.GetChild(0).GetComponent(); var playerIconButton = usernameText.transform.GetChild(0).GetComponent