using UnityEngine; using UnityEngine.UI; using UnityEngine.InputSystem; using RR.Common.Managers; using RR.Game2D.Core.Managers; namespace RR.Common.UI { /// /// Модальное окно настроек игры. /// Управляет отображением и сохранением настроек через SettingsManager. /// [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(); } } /// /// Переопределяем Open для обновления настроек при открытии. /// public override void Open() { UpdateSettings(); base.Open(); } private void Save() { if (settingsUIList == null) settingsUIList = content.GetComponent(); if (settingsUIList != null) settingsUIList.SaveSettings(); } public void SaveAndClose() { Save(); Close(); } private void UpdateSettings() { if (settingsUIList == null) settingsUIList = content.GetComponent(); if (settingsUIList != null) settingsUIList.UpdateSettings(settingsManager.GetCurrentGameSettings()); } private void SaveSettingsHandler() { GameManager.Logger.Log(name, "Saved settings"); } } }