using TMPro; using UnityEngine; public class CoinCounter : MonoBehaviour { public TextMeshProUGUI balanceLabel; public TextMeshProUGUI revengeLabel; [SerializeField] private Color revengePriceColor = new Color(1f, 0.16f, 0f); [Header("VFX")] [SerializeField, Range(0, 30)] private int maxParticles = 20; [SerializeField] private ParticleSystem AddCoinsPS; [SerializeField] private ParticleSystem RemoveCoinsPS; [Header("No coins animation")] [SerializeField] private float amplitude; [SerializeField] private float animationSpeed; private bool initialized = false; private void EmitAdd(int delta) => AddCoinsPS.Play(); private void EmitRemove(int delta) => RemoveCoinsPS.Play(); void OnEnable() => Init(); private void Init() { SetRevengePriceVisibility(false); UpdateBalanceLabel(); PaymentSystem.OnBalanceChanged += UpdateBalanceLabel; PaymentSystem.onCoinAdded += EmitAdd; PaymentSystem.onCoinRemoved += EmitRemove; SettingsManager.OnSettingsChanged.AddListener(UpdateBalanceLabel); initialized = true; } private void OnDisable() { if (!initialized) return; PaymentSystem.OnBalanceChanged -= UpdateBalanceLabel; PaymentSystem.onCoinAdded -= EmitAdd; PaymentSystem.onCoinRemoved -= EmitRemove; SettingsManager.OnSettingsChanged.RemoveListener(UpdateBalanceLabel); } private void UpdateBalanceLabel() => UpdateBalanceLabel(PaymentSystem.Balance); public void UpdateBalanceLabel(int newCount) { balanceLabel.text = $"Баланс:
{newCount} {PaymentSystem.ValutaName}"; } public void SetRevengePriceVisibility(bool visibility) { if (PaymentSystem.PriceRevenge < PaymentSystem.PricePve) { revengeLabel.text = $"Цена игры:
{PaymentSystem.PricePve} {PaymentSystem.ValutaName}
" + $"Повторная игра:
{PaymentSystem.PriceRevenge} {PaymentSystem.ValutaName}".UnderlineWrap().ColorWrap(revengePriceColor); } else { revengeLabel.text = $"Повторная игра:
{PaymentSystem.PriceRevenge} {PaymentSystem.ValutaName}"; } revengeLabel.alpha = visibility ? 1 : 0; } }