using UnityEngine; using UnityEngine.UI; using TMPro; using RR.Game2D.Core.Managers; using RR.Common.Settings; namespace RR.Common.UI { public class MainMenu : MonoBehaviour { [Header("Кнопки")] [SerializeField] private Button newGameButton; [SerializeField] private Button quitButton; [Header("Тексты")] [SerializeField] private TextMeshProUGUI paymentText; private RR.Common.Managers.PaymentManager _paymentManager; private RR.Common.Settings.SettingsManager _settingsManager; private void Start() { _paymentManager = RR.Common.Managers.PaymentManager.Instance; _settingsManager = RR.Common.Settings.SettingsManager.Instance; Bootstrap(); if (Application.platform == RuntimePlatform.WebGLPlayer) { quitButton.gameObject.SetActive(false); } if (_paymentManager != null) _paymentManager.OnCreditsChanged.AddListener(OnCreditsChanged); if (_settingsManager != null) { _settingsManager.OnSettingsLoaded += OnSettingsChanged; _settingsManager.OnSettingsSaved += OnSettingsChanged; } } private void OnDestroy() { if (_paymentManager != null) _paymentManager.OnCreditsChanged.RemoveListener(OnCreditsChanged); if (_settingsManager != null) { _settingsManager.OnSettingsLoaded -= OnSettingsChanged; _settingsManager.OnSettingsSaved -= OnSettingsChanged; } } /// /// Метод для загрузки элементов сцены. /// Вешает события на кнопки /// private void Bootstrap() { if (newGameButton) { newGameButton.onClick.AddListener(OnNewGame); // Устанавливаем начальное состояние кнопки UpdatePlayButtonState(); } if (quitButton) quitButton.onClick.AddListener(OnQuit); } /// /// Метод начала новой игры /// private static void OnNewGame() { GameManager.Instance.NewGame(); } /// /// Метод выхода из игры /// private static void OnQuit() { Application.Quit(); } private void OnCreditsChanged(int credits) { UpdatePlayButtonState(credits); } private void OnSettingsChanged() { UpdatePlayButtonState(); } private void UpdatePlayButtonState(int credits = -1) { if (credits < 0) credits = _paymentManager?.CreditsCount ?? 0; // Проверяем только через SettingsManager, так как PaymentManager обновляется с задержкой if (_settingsManager != null && _settingsManager.GetBool("payment.freeGame")) { newGameButton.interactable = true; paymentText.gameObject.SetActive(false); return; } paymentText.gameObject.SetActive(true); if (!newGameButton) return; bool canStartGame = credits >= 1; newGameButton.interactable = canStartGame; paymentText.gameObject.SetActive(!canStartGame); } } }