using AudioSourceEvents; using System; using System.Diagnostics.Tracing; using UnityEditor.UI; using UnityEngine; using UnityEngine.Audio; /// /// We automatically add the AudioSource component here so we can control it. Do not add it manually! /// [RequireComponent(typeof(AudioSource))] public class AppleAudioSource : MonoBehaviour { public enum AudioSourceType{CriticalVO,VO,Ambience,SFX,Music} public AudioSourceType audioSourceType; public AudioSource audioSource; private AudioMixer _audioMixer; public int priority; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { audioSource = GetComponent(); AudioManager.Instance.RegisterNewAudioSource(this); _audioMixer = AudioManager.Instance.audioMixer; InitializeAudioSource(); } 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("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() { if (audioSourceType == AudioSourceType.CriticalVO || audioSourceType == AudioSourceType.VO) { if (AudioManager.Instance.RequestPlayVO(this)) { audioSource.Play(); } else { Debug.Log("AppleAudioSource " + name + " was suppressed because something more important is playing"); } } } public void InterruptAudio(string nameOfInterruptingAudio) { Debug.Log("AppleAudioSource " + name + " was interrupted by source: " + nameOfInterruptingAudio); Stop(); } public void Stop() { audioSource.Stop(); } }