using System.Collections.Generic; using Code.Constants; using UnityEngine; using UnityEngine.Audio; using UnityEngine.Serialization; namespace Code.Audio { public class AudioServiceDebug : MonoBehaviour { [SerializeField] private AudioMixer mixer; private AudioSource _actionMusicSource; private AudioSource _peacefulMusicSource; [SerializeField] private AudioSource prefab; [SerializeField] private AudioResource[] peacefulAudio; [SerializeField] private AudioResource[] actionAudio; private AudioMixerGroup _masterGroup, _musicGroup, _actionMusicGroup, _peacefulMusicGroup, _SFXGroup, _creaturesGroup, _dispatcherGroup, _courierGroup, _enemiesGroup; private readonly AudioSourcePool _audioSourcePool = new(); private Dictionary _snapshots = new(); [FormerlySerializedAs("sfxAudio")] [SerializeField] private AudioClip[] sfxAudios; [SerializeField] private AudioClip[] enemiesAudios; [SerializeField] private AudioClip[] dispatcherAudios; private void MixerCreated() { _masterGroup = mixer.FindMatchingGroups(AudioGroups.MasterGroup)[0]; _actionMusicGroup = mixer.FindMatchingGroups(AudioGroups.ActionMusicGroup)[0]; _peacefulMusicGroup = mixer.FindMatchingGroups(AudioGroups.PeacefulMusicGroup)[0]; _SFXGroup = mixer.FindMatchingGroups(AudioGroups.SFXGroup)[0]; _musicGroup = mixer.FindMatchingGroups(AudioGroups.MusicGroup)[0]; _creaturesGroup = mixer.FindMatchingGroups(AudioGroups.CreaturesGroup)[0]; _dispatcherGroup = mixer.FindMatchingGroups(AudioGroups.DispatcherMusicGroup)[0]; _courierGroup = mixer.FindMatchingGroups(AudioGroups.CourierMusicGroup)[0]; _enemiesGroup = mixer.FindMatchingGroups(AudioGroups.EnemiesMusicGroup)[0]; _snapshots[AudioSnapshotState.Peaceful] = mixer.FindSnapshot(AudioGroups.PeacefulSnapshot); _snapshots[AudioSnapshotState.Action] = mixer.FindSnapshot(AudioGroups.ActionSnapshot); // _audioSourcePool.Initialize(10,prefab); InitializeMusicSources(); } private void InitializeMusicSources() { _actionMusicSource = _audioSourcePool.GetSource(); _actionMusicSource.outputAudioMixerGroup = _actionMusicGroup; _actionMusicSource.spatialBlend = 0f; _peacefulMusicSource = _audioSourcePool.GetSource(); _peacefulMusicSource.outputAudioMixerGroup = _peacefulMusicGroup; _peacefulMusicSource.spatialBlend = 0f; } private void Start() { MixerCreated(); } public void PlayRandomGameplayMusic() { _peacefulMusicSource.resource = peacefulAudio[Random.Range(0, peacefulAudio.Length)]; _actionMusicSource.resource = actionAudio[Random.Range(0, actionAudio.Length)]; _peacefulMusicSource.Play(); _actionMusicSource.Play(); } public void TransitToSnapshot(AudioSnapshotState state) { _snapshots[state].TransitionTo(1f); } #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed public void PlaySFX(SFXSounds sfxId, Vector3 position) { _audioSourcePool.PlayOneShot(sfxAudios[(int)sfxId], position, _SFXGroup); } public void PlayDebugSFX() { _audioSourcePool.PlayOneShot(sfxAudios[(int)SFXSounds.Crowbar], transform.position, _SFXGroup); } public void PlayEnemy(EnemiesSounds enemySoundId, Vector3 position) { _audioSourcePool.PlayOneShot(enemiesAudios[(int)enemySoundId], position, _enemiesGroup); } public void PlayDebugEnemySFX() { _audioSourcePool.PlayOneShot(enemiesAudios[(int)EnemiesSounds.Bastard], transform.position, _enemiesGroup); } public void PlayDispatcher(DispatcherSounds dispatcherSoundId) { _audioSourcePool.PlayShizo(dispatcherAudios[(int)dispatcherSoundId], _dispatcherGroup); } public void PlayDebugDispatcherSFX() { _audioSourcePool.PlayShizo(dispatcherAudios[(int)DispatcherSounds.AhFreeman], _dispatcherGroup); } #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed } }