using System.Collections; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using UnityEngine; using UnityEngine.UIElements; public enum SoundCategory { FruitSmash, BombExplode, ArrowFire, CannonFire, None, GunFire, } // This class in instantiated on GameManager, storing all the audio related assets public class AudioManager : MonoBehaviour { [SerializeField] private AudioClip[] FruitSmashSounds; [SerializeField] private AudioClip[] BombExplodeSounds; [SerializeField] private AudioClip[] ArrowFiringSounds; [SerializeField] private AudioClip[] CannonFiringSounds; [SerializeField] private AudioClip[] GunSounds; [SerializeField] private AudioClip LooseLifeSound; [SerializeField] private AudioClip BackgroundMusic; [SerializeField] private AudioClip GameOverSound; public AudioClip GetRandomSound(SoundCategory cat) { AudioClip[] clips; switch (cat) { case SoundCategory.FruitSmash: clips = FruitSmashSounds; break; case SoundCategory.BombExplode: clips = BombExplodeSounds; break; case SoundCategory.ArrowFire: clips = ArrowFiringSounds; break; case SoundCategory.CannonFire: clips = CannonFiringSounds; break; case SoundCategory.GunFire: clips = GunSounds ; break; default: clips = null; break; } Debug.Assert(clips.Length > 0); return clips[Random.Range(0, clips.Length)]; } public GameObject InstantiateTemprorarySound(SoundCategory cat, Transform parent, float delay_dstroy_s = 0f) { GameObject empty = new GameObject(); GameObject instance = Instantiate(empty, parent); AudioSource audio = instance.AddComponent(); if (cat != SoundCategory.None) { AudioClip clip = GetRandomSound(cat); audio.clip = clip; if (UserSettings.ins.openEffect) audio.Play(); } if (delay_dstroy_s > 0f) { GamingManager.DelayDestroy(this, instance, delay_dstroy_s); } Destroy(empty); return instance; } public GameObject InstantiateTemprorarySound(SoundCategory cat, Vector3 position, float delay_dstroy_s = 0f) { GameObject empty = new GameObject(); GameObject instance = Instantiate(empty, position, Quaternion.identity); AudioSource audio = instance.AddComponent(); if (cat != SoundCategory.None) { AudioClip clip = GetRandomSound(cat); audio.clip = clip; if (UserSettings.ins.openEffect) audio.Play(); } if (delay_dstroy_s > 0f) { GamingManager.DelayDestroy(this, instance, delay_dstroy_s); } Destroy(empty); return instance; } public AudioClip GetBackgroundMusic() { return BackgroundMusic; } public AudioClip GetLooseLifeSound() { return LooseLifeSound; } public AudioClip GetGameOverSound() { return GameOverSound; } }