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