rabidus-test/Assets/Scripts/DailyLeaderboard.cs

81 lines
2.2 KiB
C#
Raw Normal View History

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Events;
public class DailyLeaderboard : MonoBehaviour
{
[SerializeField]
protected RectTransform _content;
[SerializeField]
protected LeaderboardEntry _leaderboardEntryPrefab;
2023-10-11 11:58:06 +03:00
[SerializeField]
private LeaderboardEntry _currentPlayerLeaderboardEntry;
protected List<LeaderboardEntry> _entries = new List<LeaderboardEntry>();
private List<Player> _players = new List<Player>();
private LeaderboardController _leaderboardController;
public UnityEvent OnUpdated;
private void Awake()
{
2023-10-11 11:58:06 +03:00
_leaderboardController = FindObjectOfType<LeaderboardController>();
if (_currentPlayerLeaderboardEntry != null)
{
if (GlobalSettings.Instance.AllMaps)
_currentPlayerLeaderboardEntry.gameObject.SetActive(true);
else
_currentPlayerLeaderboardEntry.gameObject.SetActive(false);
}
}
private void OnEnable()
{
_leaderboardController.OnDailyInit.AddListener(InitLeaderboard);
}
private void OnDisable()
{
_leaderboardController.OnDailyInit.RemoveListener(InitLeaderboard);
}
private void InitLeaderboard(List<Player> players)
{
_players = players;
UpdateLeaderboard();
}
protected virtual void UpdateLeaderboard()
{
_entries.ForEach(x => Destroy(x.gameObject));
_entries.Clear();
_entries = new List<LeaderboardEntry>();
2023-10-11 11:58:06 +03:00
int currentPlayerIndex = int.MaxValue;
for (int i = 0; i < _players.Count; i++)
{
var newEntry = Instantiate(_leaderboardEntryPrefab, _content);
_entries.Add(newEntry);
2023-10-10 17:25:59 +03:00
newEntry.Init(_players[i], i, _players[i] == PlayerSetup.Instance.CurrentPlayer);
2023-10-11 11:58:06 +03:00
if (_players[i] == PlayerSetup.Instance.CurrentPlayer)
currentPlayerIndex = i;
}
if (_currentPlayerLeaderboardEntry != null)
{
_currentPlayerLeaderboardEntry.Init(PlayerSetup.Instance.CurrentPlayer, currentPlayerIndex, true);
}
2023-10-11 11:58:06 +03:00
OnUpdated?.Invoke();
}
}