101 lines
2.9 KiB
C#
101 lines
2.9 KiB
C#
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<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;
|
|
}
|
|
} |