creative-jam-20/Assets/Scripts/SoundManager.cs
TheDaringDan 58d0643ba5 Music integrated
Linked to Main Menu settings
2022-05-15 14:44:17 -04:00

95 lines
2.5 KiB
C#

using System.Collections;
using UnityEngine;
public class SoundManager : MonoBehaviour
{
public static SoundManager Instance { get; private set; }
[Header("Sound Settings")]
[Range(0f,1f)] public float masterVolume;
[Range(0f,1f)] public float musicVolume;
[Range(0f,1f)] public float sfxVolume;
[SerializeField] private float fadeTime;
[Header("Music")]
[SerializeField] private AudioSource baseMusic;
[SerializeField] private AudioSource[] dimensionMusicLayer;
[Header("Debug Values")]
[SerializeField, ReadOnly] private int dimensionMusicID;
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
}
else
{
Instance = this;
baseMusic.volume = masterVolume * musicVolume;
foreach (var layer in dimensionMusicLayer)
{
layer.volume = 0;
}
dimensionMusicID = -1;
DontDestroyOnLoad(gameObject);
}
}
public void SwitchMusicLayer(int dimensionID)
{
if (dimensionMusicID != -1) StartCoroutine(FadeOut(dimensionMusicID));
StartCoroutine(FadeIn(dimensionID));
dimensionMusicID = dimensionID;
}
private IEnumerator FadeIn(int dimensionID)
{
float time = 0;
while (time < fadeTime)
{
dimensionMusicLayer[dimensionID].volume = Mathf.Lerp(0, masterVolume * musicVolume, time / fadeTime);
yield return new WaitForSeconds(0.05f);
time += 0.05f;
}
}
private IEnumerator FadeOut(int dimensionID)
{
float time = 0;
while (time < fadeTime)
{
dimensionMusicLayer[dimensionID].volume = Mathf.Lerp(masterVolume * musicVolume, 0, time / fadeTime);
yield return new WaitForSeconds(0.05f);
time += 0.05f;
}
}
public void OnMasterVolumeChanged(float value)
{
masterVolume = value;
SetAllSoundsVolume();
}
public void OnMusicVolumeChanged(float value)
{
musicVolume = value;
SetAllSoundsVolume();
}
public void OnSfxVolumeChanged(float value)
{
sfxVolume = value;
SetAllSoundsVolume();
}
private void SetAllSoundsVolume()
{
var trueMusicVolume = masterVolume * musicVolume;
baseMusic.volume = trueMusicVolume;
if (dimensionMusicID != -1) dimensionMusicLayer[dimensionMusicID].volume = trueMusicVolume;
}
}