88 lines
2.9 KiB
C#
88 lines
2.9 KiB
C#
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<SpaceshipController>();
|
|
SpaceshipNetworkBot[] bots = FindObjectsOfType<SpaceshipNetworkBot>();
|
|
List<LeaderboardEntry> leaderboard = new List<LeaderboardEntry>();
|
|
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>().text = thisEntry.Score.ToString();
|
|
}else{
|
|
leaderboardItems[i].transform.GetChild(0).GetComponent<Text>().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;
|
|
}
|
|
}
|