using UnityEngine; /// /// Отвечает только за отображение и обновление UI монет /// 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; } }