115 lines
3.3 KiB
C#
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");
|
|
}
|
|
}
|
|
}
|
|
|