43 lines
1.8 KiB
C#
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); }
|
|
}
|
|
}
|