KitchenChaos/Assets/Scripts/SoundManager.cs

81 lines
3.0 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
using Random = UnityEngine.Random;
public class SoundManager : MonoBehaviour {
private const string PlayerPrefsSoundEffectsVolume = "SoundEffectsVolume";
[SerializeField] private AudioClipRefsSO audioClipRefsSO;
private float volume;
public static SoundManager Instance { get; private set; }
private void Awake() {
Instance = this;
volume = PlayerPrefs.GetFloat(PlayerPrefsSoundEffectsVolume, 1f);
}
private void Start() {
DeliveryManager.Instance.OnRecipeSuccess += DeliveryManager_OnRecipeSuccess;
DeliveryManager.Instance.OnRecipeFailed += DeliveryManager_OnRecipeFailed;
CuttingCounter.OnAnyCut += CuttingCounter_OnAnyCut;
Player.OnAnyPickedSomething += Player_OnAnyPickedSomething;
BaseCounter.OnAnyObjectPlacedHere += BaseCounter_OnAnyObjectPlacedHere;
TrashCounter.OnAnyObjectTrashed += TrashCounter_OnAnyObjectTrashed;
}
private void TrashCounter_OnAnyObjectTrashed(object sender, EventArgs e) {
PlaySound(audioClipRefsSO.trash, (sender as TrashCounter).transform.position);
}
private void BaseCounter_OnAnyObjectPlacedHere(object sender, EventArgs e) {
PlaySound(audioClipRefsSO.objectDrop, (sender as BaseCounter).transform.position);
}
private void Player_OnAnyPickedSomething(object sender, EventArgs e) {
PlaySound(audioClipRefsSO.objectPickup, (sender as Player).transform.position);
}
private void CuttingCounter_OnAnyCut(object sender, EventArgs e) {
PlaySound(audioClipRefsSO.chop, (sender as CuttingCounter).transform.position);
}
private void DeliveryManager_OnRecipeFailed(object sender, EventArgs e) {
PlaySound(audioClipRefsSO.deliveryFail, DeliveryCounter.Instance.transform.position);
}
private void DeliveryManager_OnRecipeSuccess(object sender, 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<AudioClip> 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;
}
}