using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.Timeline; public class AudioManager : Singleton { private AudioClip mainBgm; private AudioClip gameBgm; [HideInInspector] public AudioSource bgmAudioSource; private AudioSource sfxAudioSource; public float sfxVolume = 1.0f; [HideInInspector]public bool isPlayBGM; [HideInInspector]public bool isPlaySFX; private Dictionary audioClips = new Dictionary(); protected override void Awake() { base.Awake(); bgmAudioSource = gameObject.AddComponent(); sfxAudioSource = gameObject.AddComponent(); AudioClip[] clips = Resources.LoadAll("Sounds"); foreach (AudioClip clip in clips) { audioClips[clip.name] = clip; } } public AudioClip GetAudioClip(string clipName) { if (audioClips.TryGetValue(clipName, out AudioClip clip)) { return clip; } return null; } private void Start() { isPlayBGM = UserManager.IsPlayBGM; isPlaySFX = UserManager.IsPlaySFX; PlayBGM(); } public void PlayMainBGM() { mainBgm = GetAudioClip("MainBGM"); if (bgmAudioSource != null && mainBgm != null && !bgmAudioSource.isPlaying) { bgmAudioSource.clip = mainBgm; bgmAudioSource.loop = true; bgmAudioSource.volume = 0.1f; bgmAudioSource.Play(); } } public void PlayGameBGM() { gameBgm = GetAudioClip("GameBGM"); if (bgmAudioSource != null && gameBgm != null && !bgmAudioSource.isPlaying) { bgmAudioSource.clip = gameBgm; bgmAudioSource.loop = true; bgmAudioSource.volume = 0.1f; bgmAudioSource.Play(); } } public void PlayBGM() { if (isPlayBGM) { Scene currentScene = SceneManager.GetActiveScene(); if (currentScene.name == "Main") { StopBGM(); PlayMainBGM(); } else if (currentScene.name == "Game") { StopBGM(); PlayGameBGM(); } } } public void StopBGM() { if (bgmAudioSource != null && bgmAudioSource.isPlaying) { bgmAudioSource.Stop(); } } protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode) { PlayBGM(); } public void PlayClickSound() { if (isPlaySFX && sfxAudioSource != null) { sfxAudioSource.PlayOneShot(GetAudioClip("ClickSound"), sfxVolume); } } public void PlayCloseSound() { if (isPlaySFX && sfxAudioSource != null) { sfxAudioSource.PlayOneShot(GetAudioClip("CloseSound"), sfxVolume); } } public void PlayCoinsAddSound() { if (isPlaySFX && sfxAudioSource!=null) { sfxAudioSource.PlayOneShot(GetAudioClip("CoinsAddSound"), sfxVolume); } } public void PlayCoinsEmptySound() { if (isPlaySFX && sfxAudioSource!=null) { sfxAudioSource.PlayOneShot(GetAudioClip("CoinsEmptySound"), sfxVolume); } } public void PlayCoinsRemoveSound() { if (isPlaySFX && sfxAudioSource!=null) { sfxAudioSource.PlayOneShot(GetAudioClip("CoinsRemoveSound"), sfxVolume); } } public void PlayLoseSound() { if (isPlaySFX && sfxAudioSource!=null) { sfxAudioSource.PlayOneShot(GetAudioClip("LoseSound"), sfxVolume); } } public void PlayWinSound() { if (isPlaySFX && sfxAudioSource!=null) { sfxAudioSource.PlayOneShot(GetAudioClip("WinSound"), sfxVolume); } } public void PlayDrawSound() { if (isPlaySFX && sfxAudioSource!=null) { sfxAudioSource.PlayOneShot(GetAudioClip("DrawSound"), sfxVolume); } } public void PlayStoneSound() { if (isPlaySFX && sfxAudioSource!=null) { int randomIndex = UnityEngine.Random.Range(1, 8); sfxAudioSource.PlayOneShot(GetAudioClip("StoneSound"+randomIndex), sfxVolume); } } public void PlayRatingSound() { if (isPlaySFX && sfxAudioSource!=null) { sfxAudioSource.PlayOneShot(GetAudioClip("RatingSound"), sfxVolume); } } public void PlayRatingUpSound() { if (isPlaySFX && sfxAudioSource!=null) { sfxAudioSource.PlayOneShot(GetAudioClip("RatingUpSound"), sfxVolume); } } public void PlayRatingDownSound() { if (isPlaySFX && sfxAudioSource!=null) { sfxAudioSource.PlayOneShot(GetAudioClip("RatingDownSound"), sfxVolume); } } public void PlayErrorSound() { if (isPlaySFX && sfxAudioSource!=null) { sfxAudioSource.PlayOneShot(GetAudioClip("ErrorSound"), sfxVolume); } } }