Implemented pauses on AudioManager

This commit is contained in:
2025-10-28 13:19:33 +01:00
parent a5b1a4f8a0
commit 86bee75578
5 changed files with 181 additions and 8 deletions

View File

@@ -1,16 +1,82 @@
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
public class AudioManager : MonoBehaviour, IPausable
{
/// <summary>
/// Play all audio, just music or no audio at all when the game is paused.
/// </summary>
public enum PauseBehavior
{PlayAllAudio, MusicOnly, NoAudio}
public PauseBehavior currentPauseBehavior;
public AudioMixer _audioMixer;
private AudioListener _audioListener;
private static AudioManager _instance;
private GameObject _player;
/// <summary>
/// Singleton instance of the AudioManager.
/// </summary>
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<AudioListener>();
}
// Update is called once per frame
void Update()
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);
}
}