using System.Collections.Generic; using CurvedUI; using Steamworks; using UnityEngine; using UnityEngine.UI; public class LeaderboardGUI : MonoBehaviour { public LeaderboardWidget widgetPrefab; public Transform widgetsParent; public ScrollRect scrollWindow; public float scrollWidgetsOffset = 100f; private Vector2 scrollParentStartPos = Vector2.zero; public bool sortList; [HideInInspector] public bool isVisible; [HideInInspector] public LeaderboardsManager leaderboardsManager; [HideInInspector] public List widgetsList = new List(); public LeaderboardWidget myWidget; public Text header; public Text sandboxMessage; [Space(10f)] public List sortBackgrounds = new List(); public List sortHeaders = new List(); public Color sortHeaderColor = Color.white; public LeaderboardsManager.LeaderboardType currentLeaderboardType; public string currentLeaderboardFishery = string.Empty; private void Start() { } private void OnEnable() { for (int i = 0; i < sortBackgrounds.Count; i++) { sortBackgrounds[i].enabled = false; sortHeaders[i].color = Color.white; } isVisible = true; myWidget.RefreshEmptyWidget(); leaderboardsManager = LeaderboardsManager.Instance; leaderboardsManager.leaderboardGUI = this; if (currentLeaderboardFishery == string.Empty) { currentLeaderboardFishery = ".MAIN."; } header.text = Utilities.GetTranslation("GUI_HEADERS/LEADERBOARDS"); sandboxMessage.gameObject.SetActive(GlobalSettings.Instance.playerSettings.IsSandbox()); if ((bool)leaderboardsManager && (int)leaderboardsManager.currentServerYear != -1 && (int)leaderboardsManager.currentServerMonth != -1) { Text text = header; string text2 = text.text; text.text = text2 + " - " + leaderboardsManager.currentServerYear.ToString() + "." + leaderboardsManager.currentServerMonth.ToString("D2"); } } private void OnDisable() { foreach (LeaderboardWidget widgets in widgetsList) { Object.Destroy(widgets.gameObject); } widgetsList.Clear(); isVisible = false; } public void FindLeaderboard() { if (GlobalSettings.Instance.playerSettings.IsSandbox()) { return; } leaderboardsManager = LeaderboardsManager.Instance; if (leaderboardsManager == null || leaderboardsManager.GetCurrentLeaderboardSettings(currentLeaderboardType, currentLeaderboardFishery) == null) { return; } leaderboardsManager.leaderboardGUI = this; foreach (LeaderboardWidget widgets in widgetsList) { Object.Destroy(widgets.gameObject); } widgetsList.Clear(); bool flag = false; if (leaderboardsManager.GetCurrentLeaderboardSettings(currentLeaderboardType, currentLeaderboardFishery).leaderboardHandle.m_SteamLeaderboard == 0) { leaderboardsManager.FindLeaderboard(currentLeaderboardType, currentLeaderboardFishery); } else { leaderboardsManager.UploadScore(currentLeaderboardType, currentLeaderboardFishery); } } public void Refresh(LeaderboardSettings leaderboardSettings) { if (!SteamManager.Initialized) { return; } foreach (LeaderboardWidget widgets in widgetsList) { Object.Destroy(widgets.gameObject); } widgetsList.Clear(); int num = 20; int[] array = new int[7]; int num2 = -1; int num3 = 0; string empty = string.Empty; ulong num4 = 0uL; for (int i = 0; i < leaderboardSettings.leaderboardEntriesCount; i++) { SteamUserStats.GetDownloadedLeaderboardEntry(leaderboardSettings.scoresDownloaded_t.m_hSteamLeaderboardEntries, i, out leaderboardSettings.leaderboardEntries[i], array, array.Length); LeaderboardEntry_t leaderboardEntry_t = leaderboardSettings.leaderboardEntries[i]; num4 = leaderboardEntry_t.m_steamIDUser.m_SteamID; empty = SteamFriends.GetFriendPersonaName(leaderboardEntry_t.m_steamIDUser); if (num2 == -1) { num2 = leaderboardSettings.leaderboardMyEntry.m_nGlobalRank; } if (GlobalSettings.Instance.CheckCheatSteamID(leaderboardEntry_t.m_steamIDUser.m_SteamID) || !GlobalSettings.Instance.playerSettings.CheckStatsIntegrity(currentLeaderboardType, leaderboardSettings.fisheryName, leaderboardEntry_t.m_nScore, array)) { Debug.Log("LeaderboardLoad CheatPlayer: " + SteamFriends.GetFriendPersonaName(leaderboardEntry_t.m_steamIDUser) + " " + leaderboardEntry_t.m_steamIDUser.m_SteamID); continue; } LeaderboardWidget leaderboardWidget = null; leaderboardWidget = Object.Instantiate(widgetPrefab); leaderboardWidget.transform.SetParent(widgetsParent); RectTransform component = leaderboardWidget.GetComponent(); component.localPosition = Vector3.zero + new Vector3(0f, (float)num3 * (0f - scrollWidgetsOffset) + scrollWidgetsOffset, 0f); component.localRotation = Quaternion.identity; component.localScale = Vector3.one; leaderboardWidget.RefreshWidget(num4, empty, array, num3 + 1); if (num4 == GlobalSettings.Instance.GetPlatformProfileID()) { num2 = num3 + 1; } widgetsList.Add(leaderboardWidget); num3++; } for (int j = leaderboardSettings.leaderboardEntriesCount; j < num; j++) { LeaderboardWidget leaderboardWidget2 = Object.Instantiate(widgetPrefab); leaderboardWidget2.transform.SetParent(widgetsParent); leaderboardWidget2.GetComponent().localPosition = Vector3.zero + new Vector3(0f, (float)j * (0f - scrollWidgetsOffset) + scrollWidgetsOffset, 0f); leaderboardWidget2.GetComponent().localScale = Vector3.one; leaderboardWidget2.RefreshEmptyWidget(); widgetsList.Add(leaderboardWidget2); } for (int k = 0; k < sortBackgrounds.Count; k++) { sortBackgrounds[k].enabled = k == (int)currentLeaderboardType; sortHeaders[k].color = ((k != (int)currentLeaderboardType) ? Color.white : sortHeaderColor); } scrollParentStartPos = scrollWindow.content.localPosition; scrollWindow.content.sizeDelta = new Vector2(scrollWindow.content.sizeDelta.x, scrollWidgetsOffset * (float)Mathf.Max(num3, num)); scrollWindow.content.localPosition = scrollParentStartPos; Canvas.ForceUpdateCanvases(); scrollWindow.verticalScrollbar.value = 1f; Canvas.ForceUpdateCanvases(); myWidget.RefreshMyWidget(num2, LeaderboardsManager.Instance.GetCurrentLeaderboardPlayerStats(currentLeaderboardFishery)); scrollWindow.verticalNormalizedPosition = 1f; if ((bool)base.transform.parent.parent.GetComponent()) { base.transform.parent.parent.GetComponent().SetAllChildrenDirty(true); } } }