using RR.Common.Managers; using RR.Common.Settings; using TMPro; using UnityEngine; namespace RR.Common.UI { /// /// Отображает стоимость одной игры. /// Значения берутся из настроек: payment.startGameCost, payment.paymentImpulseCost, /// payment.currency. /// [AddComponentMenu("RR/UI/Game Price Display")] [RequireComponent(typeof(TextMeshProUGUI))] public class GamePriceDisplay : MonoBehaviour { [Header("Формат отображения")] [Tooltip("Формат строки. {0} — стоимость, {1} — валюта")] [SerializeField] private string format = "{0} {1}"; [Tooltip("Текст при бесплатной игре")] [SerializeField] private string freeGameText = "Бесплатно"; private TextMeshProUGUI _text; private SettingsManager _settingsManager; private void Awake() { _text = GetComponent(); } private void Start() { _settingsManager = SettingsManager.Instance; if (_settingsManager != null) { _settingsManager.OnSettingsLoaded += UpdateDisplay; _settingsManager.OnSettingsSaved += UpdateDisplay; } UpdateDisplay(); } private void OnDestroy() { if (_settingsManager != null) { _settingsManager.OnSettingsLoaded -= UpdateDisplay; _settingsManager.OnSettingsSaved -= UpdateDisplay; } } private void UpdateDisplay() { if (_text == null) return; if (_settingsManager == null) { _settingsManager = SettingsManager.Instance; if (_settingsManager == null) return; } bool isFreeGame = _settingsManager.GetBool("payment.freeGame"); if (isFreeGame) { _text.text = freeGameText; return; } int startGameCost = _settingsManager.GetInt("payment.startGameCost"); int impulseCost = _settingsManager.GetInt("payment.paymentImpulseCost"); if (impulseCost <= 0) impulseCost = 10; if (startGameCost <= 0) startGameCost = impulseCost; string currency = _settingsManager.GetString("payment.currency"); _text.text = string.Format(format, startGameCost, currency); } } }