Danro/Assets/Scripts/UI/MainMenu.cs
Danil Iarosh 5f339c6bd0
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
Add payment required text to main menu and improve payment handling logic
2026-01-23 16:12:34 +03:00

102 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
/// <summary>
/// Метод для загрузки элементов сцены.
/// Вешает события на кнопки
/// </summary>
private void Bootstrap()
{
if (newGameButton)
{
newGameButton.onClick.AddListener(OnNewGame);
// Устанавливаем начальное состояние кнопки
ChangePlayButtonInteractable();
}
if (quitButton) quitButton.onClick.AddListener(OnQuit);
}
/// <summary>
/// Метод начала новой игры
/// </summary>
private static void OnNewGame()
{
GameManager.Instance.NewGame();
}
/// <summary>
/// Метод выхода из игры
/// </summary>
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);
}
}
}