using AudioSourceEvents; using System; using System.Diagnostics.Tracing; using UnityEngine; using UnityEngine.Audio; using Core; using Core.Lifecycle; /// /// We automatically add the AudioSource component here so we can control it. Do not add it manually! /// [RequireComponent(typeof(AudioSource))] public class AppleAudioSource : ManagedBehaviour { public enum AudioSourceType{CriticalVO,VO,Ambience,SFX,Music} public AudioSourceType audioSourceType; [HideInInspector] public AudioSource audioSource; private AudioMixer _audioMixer; [HideInInspector ] public int clipPriority; public int sourcePriority; protected override void Awake() { base.Awake(); audioSource = GetComponent(); } // Start is called once before the first execution of Update after the MonoBehaviour is created protected override void OnManagedAwake() { audioSource = GetComponent(); AudioManager.Instance.RegisterNewAudioSource(this); _audioMixer = AudioManager.Instance.audioMixer; InitializeAudioSource(); audioSource.playOnAwake = false; } public void InitializeAudioSource() { // Route the audio to the correct bus depending on type switch (audioSourceType) { case AppleAudioSource.AudioSourceType.CriticalVO: audioSource.outputAudioMixerGroup = _audioMixer.FindMatchingGroups("Critical VO")[0]; break; case AppleAudioSource.AudioSourceType.VO: audioSource.outputAudioMixerGroup = _audioMixer.FindMatchingGroups("Flavor VO")[0]; break; case AppleAudioSource.AudioSourceType.SFX: audioSource.outputAudioMixerGroup = _audioMixer.FindMatchingGroups("SFX")[0]; break; case AppleAudioSource.AudioSourceType.Ambience: audioSource.outputAudioMixerGroup = _audioMixer.FindMatchingGroups("Ambience")[0]; break; case AppleAudioSource.AudioSourceType.Music: audioSource.outputAudioMixerGroup = _audioMixer.FindMatchingGroups("Music")[0]; break; } } public void Play(int requestedClipPriority) { if (audioSource == null) { audioSource = GetComponent(); } clipPriority = requestedClipPriority; if (audioSourceType == AudioSourceType.CriticalVO || audioSourceType == AudioSourceType.VO) { if (AudioManager.Instance.RequestPlayVO(this)) { audioSource.Play(); } else { Logging.Debug("[AUDIOMANAGER] AppleAudioSource " + name + " was suppressed because something more important is playing"); } } else { audioSource.Play(); } } public void InterruptAudio(string nameOfInterruptingAudio) { Stop(); } public void Stop() { clipPriority = 0; audioSource.Stop(); } }