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);
}
}