using System; using DG.Tweening; using FMOD.Studio; using FMODUnity; using SatorImaging.AppWindowUtility; using UnityEngine; using UnityEngine.Audio; using UnityEngine.Serialization; using UnityEngine.UI; namespace View.UI { public class SettingsMenu : MonoBehaviour { [SerializeField] private CanvasGroup mainUIGroup; [SerializeField] private Button openSettingsButton; [Space] [SerializeField] private CanvasGroup settingsUIGroup; [SerializeField] private Button closeSettingsButton; [Space] [SerializeField] private float transitionDuration = .5f; [Space] [SerializeField] private Toggle musicToggle; [SerializeField] private Toggle sfxToggle; [SerializeField] private Toggle alwaysOnTopToggle; [Space] [SerializeField] private EventReference selectSound; [SerializeField] private EventReference deselectSound; private Bus _musicBus; private Bus _sfxBus; private void Awake() { openSettingsButton.onClick.AddListener(OpenSettings); closeSettingsButton.onClick.AddListener(CloseSettings); musicToggle.onValueChanged.AddListener(MusicStateChange); sfxToggle.onValueChanged.AddListener(SFXStateChange); alwaysOnTopToggle.onValueChanged.AddListener(AlwaysOnTopStateChange); _musicBus = RuntimeManager.GetBus("bus:/Music"); _sfxBus = RuntimeManager.GetBus("bus:/SFX"); } private void AlwaysOnTopStateChange(bool state) { PlayToggleSound(state); AppWindowUtility.AlwaysOnTop = state; } private void SFXStateChange(bool state) { PlayToggleSound(state); _sfxBus.setMute(!state); } private void MusicStateChange(bool state) { PlayToggleSound(state); _musicBus.setMute(!state); } private void PlayToggleSound(bool state) => RuntimeManager.PlayOneShot(state ? selectSound : deselectSound); private void OpenSettings() { PlayToggleSound(true); mainUIGroup.interactable = mainUIGroup.blocksRaycasts = false; mainUIGroup.DOFade(0f, transitionDuration); settingsUIGroup.interactable = settingsUIGroup.blocksRaycasts = true; settingsUIGroup.DOFade(1f, transitionDuration); } private void CloseSettings() { PlayToggleSound(false); settingsUIGroup.interactable = settingsUIGroup.blocksRaycasts = false; settingsUIGroup.DOFade(0f, transitionDuration); mainUIGroup.interactable = mainUIGroup.blocksRaycasts = true; mainUIGroup.DOFade(1f, transitionDuration); } } }