Danro/Assets/Scripts/UI/SettingsUI.cs

115 lines
3.3 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.InputSystem;
using RR.Common.Managers;
using RR.Game2D.Core.Managers;
namespace RR.Common.UI
{
/// <summary>
/// Модальное окно настроек игры.
/// Управляет отображением и сохранением настроек через SettingsManager.
/// </summary>
[RequireComponent(typeof(CanvasGroup))]
public class SettingsUI : Modal
{
[Header("Дополнительное управление")]
[SerializeField] private InputActionReference triggerKey;
[SerializeField] private Button saveButton;
[Header("Контент настроек")]
[SerializeField] private Transform content;
private SettingsUIList settingsUIList;
private SettingsManager settingsManager;
protected override void Awake()
{
base.Awake();
settingsManager = SettingsManager.Instance;
if (triggerKey != null)
triggerKey.action.started += OnTriggerKey;
if (settingsManager == null)
{
GameManager.Logger.LogError(name, "SettingsManager is null!");
return;
}
settingsManager.OnSettingsLoaded += UpdateSettings;
settingsManager.OnSettingsSaved += SaveSettingsHandler;
if (saveButton)
saveButton.onClick.AddListener(SaveAndClose);
}
private void OnDestroy()
{
if (settingsManager != null)
{
settingsManager.OnSettingsLoaded -= UpdateSettings;
settingsManager.OnSettingsSaved -= SaveSettingsHandler;
}
if (triggerKey != null)
triggerKey.action.started -= OnTriggerKey;
if (saveButton)
saveButton.onClick.RemoveListener(SaveAndClose);
}
private void OnTriggerKey(InputAction.CallbackContext ctx)
{
if (IsOpen)
{
SaveAndClose();
}
else
{
Open();
}
}
/// <summary>
/// Переопределяем Open для обновления настроек при открытии.
/// </summary>
public override void Open()
{
UpdateSettings();
base.Open();
}
private void Save()
{
if (settingsUIList == null)
settingsUIList = content.GetComponent<SettingsUIList>();
if (settingsUIList != null)
settingsUIList.SaveSettings();
}
public void SaveAndClose()
{
Save();
Close();
}
private void UpdateSettings()
{
if (settingsUIList == null)
settingsUIList = content.GetComponent<SettingsUIList>();
if (settingsUIList != null)
settingsUIList.UpdateSettings(settingsManager.GetCurrentGameSettings());
}
private void SaveSettingsHandler()
{
GameManager.Logger.Log(name, "Saved settings");
}
}
}