using RR.Common.Managers;
using UnityEngine;
using UnityEngine.UI;
using RR.Game2D.Core.Managers;
using TMPro;
namespace RR.Common.UI
{
public class MainMenu : MonoBehaviour
{
[Header("Кнопки")]
[SerializeField] private Button newGameButton;
[SerializeField] private Button quitButton;
[Header("Тексты")] [SerializeField] private TextMeshProUGUI paymentText;
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) return;
SettingsManager.Instance.OnSettingsLoaded += ChangePlayButtonInteractable;
SettingsManager.Instance.OnSettingsSaved += ChangePlayButtonInteractable;
}
private void OnDestroy()
{
if (_paymentManager != null) _paymentManager.OnCreditsChanged.RemoveListener(ChangePlayButtonInteractable);
if (SettingsManager.Instance == null) return;
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 static void OnNewGame()
{
GameManager.Instance.NewGame();
}
///
/// Метод выхода из игры
///
private static void OnQuit()
{
Application.Quit();
}
private void ChangePlayButtonInteractable(int credits)
{
// Проверяем только через SettingsManager, так как PaymentManager обновляется с задержкой
if (SettingsManager.Instance.GetCurrentGameSettings().isFreeGame)
{
newGameButton.interactable = true;
newGameButton.interactable = true;
paymentText.gameObject.SetActive(false);
return;
}
else paymentText.gameObject.SetActive(true);
if (!newGameButton) return;
bool canStartGame = credits >= 1;
newGameButton.interactable = canStartGame;
newGameButton.interactable = canStartGame;
paymentText.gameObject.SetActive(!canStartGame);
}
private void ChangePlayButtonInteractable()
{
ChangePlayButtonInteractable(_paymentManager.CreditsCount);
}
}
}