74 lines
2.0 KiB
C#

using UnityEngine;
/// <summary>
/// Îòâå÷àåò òîëüêî çà îòîáðàæåíèå è îáíîâëåíèå UI ìîíåò
/// </summary>
public class CoinUI : MonoBehaviour
{
[SerializeField] private int playerId;
[SerializeField] private Coin coin;
private int lastCoins;
private bool eventsSubscribed;
private void OnEnable()
{
CreditSystem.OnInitialize += Subscribe;
if (!eventsSubscribed && (CreditSystem.onCoinAdded != null || CreditSystem.onCoinRemoved != null))
Subscribe();
}
private void OnDisable()
{
if (eventsSubscribed)
{
if (CreditSystem.onCoinAdded != null) CreditSystem.onCoinAdded.RemoveListener(HandleCoinsChanged);
if (CreditSystem.onCoinRemoved != null) CreditSystem.onCoinRemoved.RemoveListener(HandleCoinsChanged);
eventsSubscribed = false;
}
CreditSystem.OnInitialize -= Subscribe;
}
private void Subscribe()
{
if (eventsSubscribed) return;
if (CreditSystem.onCoinAdded != null) CreditSystem.onCoinAdded.AddListener(HandleCoinsChanged);
if (CreditSystem.onCoinRemoved != null) CreditSystem.onCoinRemoved.AddListener(HandleCoinsChanged);
lastCoins = CreditSystem.GetPlayerCredits(playerId);
eventsSubscribed = true;
}
private void Start()
{
int current = CreditSystem.GetPlayerCredits(playerId);
lastCoins = current;
if (coin != null)
{
coin.ChangeCoinText($"{current}");
if (current == 0) coin.FreezeCoin();
else coin.UnfreezeCoin();
}
}
private void HandleCoinsChanged(int playerID, int newAmount)
{
if (coin == null || playerID != playerId) return;
coin.ChangeCoinText($"{newAmount}");
if (newAmount == 0) coin.FreezeCoin();
else coin.UnfreezeCoin();
if (newAmount > lastCoins)
coin.PlayAddCoinsAnimation();
lastCoins = newAmount;
}
}