using System; 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 int mode = -1; void Awake() { selectionScoreButton.onClick.AddListener(() => { mode = 0; SwitchMenu(1); }); selectionBerryButton.onClick.AddListener(() => { mode = 1; SwitchMenu(1); }); selectionCoinButton.onClick.AddListener(() => { mode = 2; SwitchMenu(1); }); selectionLegacyButton.onClick.AddListener(() => { mode = 3; SwitchMenu(1); }); selectionTotalBerriesButton.onClick.AddListener(() => { mode = 4; 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 = -1; refreshButton.gameObject.SetActive(false); selectionPanel.SetActive(true); scoresPanel.SetActive(false); } else if (menu == 1) { refreshButton.transform.localPosition = mode == 1 ? new Vector2(402.5f, 282.33f) : new Vector2(-402.5f, -282.33f); refreshButton.gameObject.SetActive(true); berryShowTypeDropdown.gameObject.SetActive(mode == 1); berryShowTypeDropdown.value = 0; selectionPanel.SetActive(false); scoresPanel.SetActive(true); GetTopPlayers(); } } async void GetTopPlayers() { 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 == 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("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"]) { foreach (var entry in jsonResponse["data"].ToObject()) { 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