Files
AppleHillsProduction/Assets/Scripts/Sound/AudioManager.cs

83 lines
2.2 KiB
C#
Raw Normal View History

2025-10-28 13:19:33 +01:00
using AppleHills.Core.Settings;
using Bootstrap;
using Core;
using PuzzleS;
2025-10-17 14:38:42 +02:00
using UnityEngine;
2025-10-28 13:19:33 +01:00
using UnityEngine.Audio;
using Bootstrap;
using AppleHills.Core;
using AppleHills.Core.Interfaces;
2025-10-17 14:38:42 +02:00
2025-10-28 13:19:33 +01:00
public class AudioManager : MonoBehaviour, IPausable
2025-10-17 14:38:42 +02:00
{
2025-10-28 13:19:33 +01:00
/// <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()
{
}
2025-10-17 14:38:42 +02:00
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
2025-10-28 13:19:33 +01:00
_player = QuickAccess.Instance.PlayerGameObject;
_audioListener = QuickAccess.Instance.MainCamera.GetComponent<AudioListener>();
}
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);
2025-10-17 14:38:42 +02:00
}
2025-10-28 13:19:33 +01:00
public void DoResume()
2025-10-20 13:57:38 +02:00
{
2025-10-28 13:19:33 +01:00
SetAudioPauseBehavior(PauseBehavior.PlayAllAudio);
2025-10-17 14:38:42 +02:00
}
}