using System; using System.Collections.Generic; using UnityEngine; using Random = UnityEngine.Random; public class SoundManager : MonoBehaviour { public static SoundManager Instance { get; private set; } [SerializeField] private AudioClipRefsSO audioClipRefsSO; private void Start() { DeliveryManager.Instance.OnRecipeSuccess += DeliveryManager_OnRecipeSuccess; DeliveryManager.Instance.OnRecipeFailed += DeliveryManager_OnRecipeFailed; CuttingCounter.OnAnyCut += CuttingCounter_OnAnyCut; Player.Instance.OnPickedSomething += Player_OnPickedSomething; BaseCounter.OnAnyObjectPlacedHere += BaseCounter_OnAnyObjectPlacedHere; TrashCounter.OnAnyObjectTrashed += TrashCounter_OnAnyObjectTrashed; } private const string PlayerPrefsSoundEffectsVolume = "SoundEffectsVolume"; private float volume; private void Awake() { Instance = this; volume = PlayerPrefs.GetFloat(PlayerPrefsSoundEffectsVolume, 1f); } private void TrashCounter_OnAnyObjectTrashed(object sender, System.EventArgs e) { PlaySound(audioClipRefsSO.trash, (sender as TrashCounter).transform.position); } private void BaseCounter_OnAnyObjectPlacedHere(object sender, System.EventArgs e) { PlaySound(audioClipRefsSO.objectDrop, (sender as BaseCounter).transform.position); } private void Player_OnPickedSomething(object sender, System.EventArgs e) { PlaySound(audioClipRefsSO.objectPickup, Player.Instance.transform.position); } private void CuttingCounter_OnAnyCut(object sender, System.EventArgs e) { PlaySound(audioClipRefsSO.chop, (sender as CuttingCounter).transform.position); } private void DeliveryManager_OnRecipeFailed(object sender, System.EventArgs e) { PlaySound(audioClipRefsSO.deliveryFail, DeliveryCounter.Instance.transform.position); } private void DeliveryManager_OnRecipeSuccess(object sender, System.EventArgs e) { PlaySound(audioClipRefsSO.deliverySuccess, DeliveryCounter.Instance.transform.position); } private void PlaySound(AudioClip audioClip, Vector3 position, float volumeMultiplier = 1f) { AudioSource.PlayClipAtPoint(audioClip, position, volumeMultiplier * volume); } private void PlaySound(IReadOnlyList audioClipArray, Vector3 position, float volumeMultiplier = 1f) { PlaySound(audioClipArray[Random.Range(0, audioClipArray.Count)], position, volumeMultiplier * volume); } public void PlayFootstepsSound(Vector3 position, float volumeMultiplier) { PlaySound(audioClipRefsSO.footstep, position, volumeMultiplier * volume); } public void PlayCountdownSound() { PlaySound(audioClipRefsSO.warning, Vector3.zero); } public void PlayWarningSound(Vector3 position) { PlaySound(audioClipRefsSO.warning, position); } public void ChangeVolume() { volume += .1f; if (volume > 1.1f) { volume = 0f; } PlayerPrefs.SetFloat(PlayerPrefsSoundEffectsVolume, volume); PlayerPrefs.Save(); } public float GetVolume() { return volume; } }