using Sirenix.OdinInspector; using UnityEngine; namespace OnlyScove.Scripts { public class SettingsManager : MonoBehaviour { public static SettingsManager Instance { get; private set; } [BoxGroup("Settings")] [Required] [InlineEditor] [SerializeField] private GameSettings settings; public GameSettings Settings => settings; [ShowInInspector] [ReadOnly] [BoxGroup("Runtime")] private bool IsActiveInstance => Instance == this; private void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); if (settings == null) { // Fallback or load from Resources if needed settings = ScriptableObject.CreateInstance(); } } else { Destroy(gameObject); } } public void SetSensitivity(float value) { settings.sensitivity = value; OnSettingsChanged?.Invoke(); } public void SetInvertX(bool value) { settings.invertX = value; OnSettingsChanged?.Invoke(); } public void SetInvertY(bool value) { settings.invertY = value; OnSettingsChanged?.Invoke(); } public void SetSideBias(bool isRight) { settings.sideBiasRight = isRight; OnSettingsChanged?.Invoke(); } public void ToggleSideBias() { settings.sideBiasRight = !settings.sideBiasRight; OnSettingsChanged?.Invoke(); } [Button("Notify Settings Changed")] private void NotifySettingsChanged() { OnSettingsChanged?.Invoke(); } public event System.Action OnSettingsChanged; } }