77 lines
2.2 KiB
C#
77 lines
2.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
public class LeaderboardBase : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
protected RectTransform _content;
|
|
[SerializeField]
|
|
protected LeaderboardEntry _leaderboardEntryPrefab;
|
|
[SerializeField]
|
|
protected LeaderboardEntry _currentPlayerLeaderboardEntry;
|
|
|
|
protected List<LeaderboardEntry> _entries = new List<LeaderboardEntry>();
|
|
protected List<Player> _players = new List<Player>();
|
|
protected LeaderboardController _leaderboardController;
|
|
|
|
public UnityEvent OnUpdated;
|
|
|
|
protected void Awake()
|
|
{
|
|
_leaderboardController = FindObjectOfType<LeaderboardController>();
|
|
|
|
if (_currentPlayerLeaderboardEntry != null)
|
|
{
|
|
if (GlobalSettings.Instance.AllMaps)
|
|
_currentPlayerLeaderboardEntry.gameObject.SetActive(true);
|
|
else
|
|
_currentPlayerLeaderboardEntry.gameObject.SetActive(false);
|
|
|
|
}
|
|
}
|
|
|
|
protected virtual void OnEnable()
|
|
{
|
|
//_leaderboardController.OnDailyInit.AddListener(InitLeaderboard);
|
|
}
|
|
|
|
protected virtual void OnDisable()
|
|
{
|
|
//_leaderboardController.OnDailyInit.RemoveListener(InitLeaderboard);
|
|
}
|
|
|
|
protected void InitLeaderboard(List<Player> players)
|
|
{
|
|
_players = players;
|
|
UpdateLeaderboard();
|
|
}
|
|
|
|
protected void UpdateLeaderboard()
|
|
{
|
|
_entries.ForEach(x => Destroy(x.gameObject));
|
|
_entries.Clear();
|
|
_entries = new List<LeaderboardEntry>();
|
|
|
|
int currentPlayerIndex = int.MaxValue;
|
|
|
|
for (int i = 0; i < _players.Count; i++)
|
|
{
|
|
var newEntry = Instantiate(_leaderboardEntryPrefab, _content);
|
|
_entries.Add(newEntry);
|
|
newEntry.Init(_players[i], i, _players[i] == PlayerSetup.Instance.CurrentPlayer);
|
|
|
|
if (_players[i] == PlayerSetup.Instance.CurrentPlayer)
|
|
currentPlayerIndex = i;
|
|
}
|
|
|
|
if (_currentPlayerLeaderboardEntry != null && GlobalSettings.Instance.AllMaps)
|
|
{
|
|
_currentPlayerLeaderboardEntry.Init(PlayerSetup.Instance.CurrentPlayer, currentPlayerIndex, true);
|
|
}
|
|
|
|
OnUpdated?.Invoke();
|
|
}
|
|
}
|