This repository has been archived on 2025-03-20. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
mojo-kitchen-chaos/Assets/Scripts/SoundManager.cs

110 lines
3.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SoundManager : MonoBehaviour
{
private const string PLAYER_PREFS_SFX_VOLUME = "SFXVolume";
public static SoundManager Instance { get; private set; }
[SerializeField] private AudioClipsRefsSO audioClipsRefsSO;
private float volume;
private void Awake()
{
Instance = this;
volume = PlayerPrefs.GetFloat(PLAYER_PREFS_SFX_VOLUME, 1f);
}
private void Start()
{
DeliveryManager.Instance.OnRecipeSuccess += DeliveryManager_OnRecipeSuccess;
DeliveryManager.Instance.OnRecipeFailed += DeliveryManager_OnRecipeFailed;
CuttingCounter.OnAnyCut += CuttingCounter_OnAnyCut;
Player.Instance.OnPickedUpSomething += Player_OnPickedUpSomething;
BaseCounter.OnAnyObjectPlaced += BaseCounter_OnAnyObjectPlaced;
TrashCounter.OnAnyObjectTrashed += TrashCounter_OnAnyObjectTrashed;
}
private void TrashCounter_OnAnyObjectTrashed(object sender, System.EventArgs e)
{
TrashCounter trashCounter = sender as TrashCounter;
PlaySound(audioClipsRefsSO.trash, trashCounter.transform.position);
}
private void BaseCounter_OnAnyObjectPlaced(object sender, System.EventArgs e)
{
BaseCounter counter = sender as BaseCounter;
PlaySound(audioClipsRefsSO.objectDrop, counter.transform.position);
}
private void Player_OnPickedUpSomething(object sender, System.EventArgs e)
{
PlaySound(audioClipsRefsSO.objectPickup, Player.Instance.transform.position);
}
private void CuttingCounter_OnAnyCut(object sender, System.EventArgs e)
{
CuttingCounter cuttingCounter = sender as CuttingCounter;
PlaySound(audioClipsRefsSO.chop, cuttingCounter.transform.position);
}
private void DeliveryManager_OnRecipeFailed(object sender, System.EventArgs e)
{
DeliveryCounter deliveryCounter = DeliveryCounter.Instance;
PlaySound(audioClipsRefsSO.deliveryFail, deliveryCounter.transform.position);
}
private void DeliveryManager_OnRecipeSuccess(object sender, System.EventArgs e)
{
DeliveryCounter deliveryCounter = DeliveryCounter.Instance;
PlaySound(audioClipsRefsSO.deliverySuccess, deliveryCounter.transform.position);
}
private void PlaySound(AudioClip[] audioClipArray, Vector3 position, float volume = 1f)
{
PlaySound(audioClipArray[Random.Range(0, audioClipArray.Length)], position, volume);
}
private void PlaySound(AudioClip audioClip, Vector3 position, float volumeMultiplier = 1f)
{
AudioSource.PlayClipAtPoint(audioClip, position, volumeMultiplier * volume);
}
public void PlayFootsteps(Vector3 position, float volume)
{
PlaySound(audioClipsRefsSO.footstep, position, volume);
}
public void PlayCountdown()
{
PlaySound(audioClipsRefsSO.warning, Vector3.zero);
}
public void PlayWarningSound(Vector3 position)
{
PlaySound(audioClipsRefsSO.warning, position);
}
public void ChangeVolume()
{
volume += .1f;
if (volume >= 1.1f) {
volume = 0f;
}
PlayerPrefs.SetFloat(PLAYER_PREFS_SFX_VOLUME, volume);
PlayerPrefs.Save();
}
public float GetVolume()
{
return volume;
}
}