119 lines
4.6 KiB
C#
119 lines
4.6 KiB
C#
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<AudioSnapshotState, AudioMixerSnapshot> _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
|
|
}
|
|
|
|
}
|
|
|
|
|