68 lines
1.8 KiB
C#
68 lines
1.8 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;
|
|
|
|
[Self] [SerializeField] private AudioSource musicSource;
|
|
[Self] [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 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);
|
|
}
|
|
}
|
|
} |