74 lines
2.0 KiB
C#
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;
|
|
}
|
|
}
|
|
|