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.BalanceManager _balanceManager; private RR.Common.Settings.SettingsManager _settingsManager; private void Start() { _balanceManager = RR.Common.Managers.BalanceManager.Instance; _settingsManager = RR.Common.Settings.SettingsManager.Instance; Bootstrap(); if (Application.platform == RuntimePlatform.WebGLPlayer) { quitButton.gameObject.SetActive(false); } if (_balanceManager != null) _balanceManager.OnBalanceChanged.AddListener(OnBalanceChanged); if (_settingsManager != null) { _settingsManager.OnSettingsLoaded += OnSettingsChanged; _settingsManager.OnSettingsSaved += OnSettingsChanged; } } private void OnDestroy() { if (_balanceManager != null) _balanceManager.OnBalanceChanged.RemoveListener(OnBalanceChanged); 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 OnBalanceChanged(int balance) { UpdatePlayButtonState(); } private void OnSettingsChanged() { UpdatePlayButtonState(); } private void UpdatePlayButtonState() { if (!newGameButton) return; // Проверяем бесплатную игру if (_settingsManager != null && _settingsManager.GetBool("payment.freeGame")) { newGameButton.interactable = true; paymentText.gameObject.SetActive(false); return; } // Проверяем баланс через BalanceManager bool canStartGame = _balanceManager != null && _balanceManager.CanStartGame(); newGameButton.interactable = canStartGame; paymentText.gameObject.SetActive(!canStartGame); } } }