using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Leaderboard : MonoBehaviour { public Text[] leaderboardItems; public float updateInterval = 0.5f; public bool isRanked; float t; void Start() { RefreshLeaderboard(); } // Update is called once per frame void Update() { // if(AutoConnect.instance != null &&!AutoConnect.instance.isClient){return;} if (t < updateInterval) { t += Time.deltaTime; } else { RefreshLeaderboard(); t = 0; } } public void RefreshLeaderboard() { // Debug.Log("Refrsh leaderboard"); SpaceshipController[] players = FindObjectsOfType(); SpaceshipNetworkBot[] bots = FindObjectsOfType(); List leaderboard = new List(); foreach(SpaceshipController player in players){ leaderboard.Add(new LeaderboardEntry(player.pname,(isRanked) ? player.moonsCollected : player.Scores)); } if(!isRanked){ foreach(SpaceshipNetworkBot bot in bots){ leaderboard.Add(new LeaderboardEntry(bot.pname, bot.Scores)); } } //Simple bubble sort to sort players by score LeaderboardEntry temp; for (int j = 0; j <= leaderboard.Count - 2; j++) { for (int i = 0; i <= leaderboard.Count - 2; i++) { if ( leaderboard[i].Score > leaderboard[i+1].Score) { temp = leaderboard[i + 1]; leaderboard[i + 1] = leaderboard[i]; leaderboard[i] = temp; } } } //Populate leaderboard for(int i =0; i < leaderboardItems.Length; i++){ if(i < leaderboard.Count){ LeaderboardEntry thisEntry = leaderboard[leaderboard.Count-i-1]; leaderboardItems[i].gameObject.SetActive(true); leaderboardItems[i].text = (i+1) + ". " +thisEntry.Name; if(!isRanked){ leaderboardItems[i].transform.GetChild(0).GetComponent().text = thisEntry.Score.ToString(); }else{ leaderboardItems[i].transform.GetChild(0).GetComponent().text = (((float)Mathf.Clamp(thisEntry.Score,0,30)/ 30f)*100f).ToString("n1") + " %"; } }else{ leaderboardItems[i].gameObject.SetActive(false); } } } } public class LeaderboardEntry{ public int Score; public string Name; public LeaderboardEntry(string _name, int _score){ Name = _name; Score= _score; } }