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