Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
- Добавил новую систему настроек, возможности:
- Динамически создает список настроек
- Сохраняет настройки в JSON-файл
- Возможность группировать настройки
- Широкие возможности по кастомизации
- Применение настроек в реальном времени (частично)
- Добавил префабы для новых элементов настроек
- Изменил поведение игры исходя из нового формата настроек
118 lines
3.7 KiB
C#
118 lines
3.7 KiB
C#
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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Метод для загрузки элементов сцены.
|
||
/// Вешает события на кнопки
|
||
/// </summary>
|
||
private void Bootstrap()
|
||
{
|
||
if (newGameButton)
|
||
{
|
||
newGameButton.onClick.AddListener(OnNewGame);
|
||
// Устанавливаем начальное состояние кнопки
|
||
UpdatePlayButtonState();
|
||
}
|
||
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 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);
|
||
}
|
||
}
|
||
} |