using AppleHills.Core.Settings; using Bootstrap; using Core; using PuzzleS; using UnityEngine; using UnityEngine.Audio; using Bootstrap; using AppleHills.Core; using AppleHills.Core.Interfaces; public class AudioManager : MonoBehaviour, IPausable { /// /// Play all audio, just music or no audio at all when the game is paused. /// public enum PauseBehavior {PlayAllAudio, MusicOnly, NoAudio} public PauseBehavior currentPauseBehavior; public AudioMixer _audioMixer; private AudioListener _audioListener; private static AudioManager _instance; private GameObject _player; /// /// Singleton instance of the AudioManager. /// public static AudioManager Instance => _instance; void Awake() { _instance = this; // Register for post-boot initialization BootCompletionService.RegisterInitAction(InitializePostBoot); GameManager.Instance.RegisterPausableComponent(this); } private void InitializePostBoot() { } // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { _player = QuickAccess.Instance.PlayerGameObject; _audioListener = QuickAccess.Instance.MainCamera.GetComponent(); } public void SetAudioPauseBehavior(PauseBehavior newPauseBehavior) { switch (newPauseBehavior) { case PauseBehavior.PlayAllAudio: _audioMixer.updateMode = AudioMixerUpdateMode.UnscaledTime; AudioListener.pause = false; break; case PauseBehavior.MusicOnly: _audioMixer.updateMode = AudioMixerUpdateMode.UnscaledTime; break; //TODO: Pause all audio mixers except music mixer case PauseBehavior.NoAudio: _audioMixer.updateMode = AudioMixerUpdateMode.Normal; AudioListener.pause = true; break; } } public void Pause() { SetAudioPauseBehavior(PauseBehavior.NoAudio); } public void DoResume() { SetAudioPauseBehavior(PauseBehavior.PlayAllAudio); } }