Files
decay-grid/Assets/Scripts/Infrastructure/Unity/SoundManager.cs

70 lines
1.9 KiB
C#

using System;
using KBCore.Refs;
using UnityEngine;
namespace Infrastructure.Unity
{
[RequireComponent(typeof(AudioSource))]
public class SoundManager : MonoBehaviour
{
[Header("Music")]
[SerializeField] private AudioClip bgMusicClip;
[Header("Sound Effects")]
[SerializeField] private AudioClip startClip;
[SerializeField] private AudioClip scoreClip;
[SerializeField] private AudioClip gameOverClip;
[SerializeField] private AudioClip tileWarningClip;
[SerializeField] private AudioClip tileBreakClip;
[SerializeField] private AudioClip npcSpawnClip;
[SerializeField] private AudioSource musicSource;
[SerializeField] private AudioSource sfxSource;
private void Awake()
{
musicSource.loop = true;
musicSource.playOnAwake = false;
}
public void PlayMusic()
{
if (!bgMusicClip) return;
musicSource.clip = bgMusicClip;
musicSource.Play();
}
public void StopMusic()
{
musicSource.Stop();
}
public void PlayGameStart() => PlaySfx(startClip);
public void PlayScore() => PlaySfx(scoreClip);
public void PlayGameOver() => PlaySfx(gameOverClip);
public void PlayNpcSpawn() => PlaySfx(npcSpawnClip);
public void PlayTileBreak(Vector3 position)
{
if (!tileBreakClip) return;
AudioSource.PlayClipAtPoint(tileBreakClip, position, 1f);
}
public void PlayTileWarning(Vector3 position)
{
if (!tileWarningClip) return;
AudioSource.PlayClipAtPoint(tileWarningClip, position, 0.5f);
}
private void PlaySfx(AudioClip clip)
{
if (!clip) return;
sfxSource.PlayOneShot(clip);
}
}
}