Files
MagnetismHeroes/Assets/MagnetismHeroes/UnityRuntime/Presentation/GameSound.cs
T

43 lines
1.8 KiB
C#

using UnityEngine;
namespace MagnetismHeroes.UnityRuntime.Presentation
{
public sealed class GameSound : MonoBehaviour
{
[SerializeField] private VoicePlayer _voice;
[SerializeField] private AudioSource _sfx;
[SerializeField] private AudioSource _music;
[SerializeField] private AudioClip _merge, _split, _count, _success;
[SerializeField] private AudioClip _pickup, _ui, _selection, _encourage, _supply, _hint;
[SerializeField] private AudioClip _garden, _cloud, _workshop, _menu;
private string _theme;
public void Merge() => Play(_merge);
public void Split() => Play(_split);
public void Count() => Play(_count);
public void Success() => Play(_success);
public void Pickup() => Play(_pickup);
public void UI() => Play(_ui);
public void Selection() => Play(_selection);
public void Encourage() => Play(_encourage);
public void Supply() => Play(_supply);
public void Hint() => Play(_hint);
private void Play(AudioClip clip) { if (clip != null) { Update(); _sfx.PlayOneShot(clip); } }
public void Theme(string theme)
{
_theme = theme;
var clip = theme == "Garden" ? _garden : theme == "Cloud" ? _cloud : theme == "Workshop" ? _workshop : theme == "Menu" ? _menu : null;
if (_music.clip == clip) return;
_music.Stop(); _music.clip = clip;
if (clip != null) _music.Play();
}
public void Clear() { _sfx.Stop(); _music.Stop(); _music.clip = null; }
private void Update()
{
bool speech = _voice.IsSpeaking;
_sfx.volume = speech ? .12f : .5f;
_music.volume = speech ? .06f : .25f;
}
private void OnApplicationPause(bool paused) { if (paused) Clear(); else Theme(_theme); }
}
}