using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Audio; namespace Hallucinate.Audio { [Serializable] public class AudioSample { public string Name; public AudioClip Clip; [Range(0f, 1f)] public float DefaultVolume = 1f; [Range(0.1f, 3f)] public float DefaultPitch = 1f; public AudioMixerGroup MixerGroup; } [CreateAssetMenu(fileName = "AudioDatabase", menuName = "Hallucinate/Audio/Audio Database")] public class AudioDatabase : ScriptableObject { [SerializeField] private List samples = new List(); private Dictionary _sampleCache; public void Initialize() { _sampleCache = new Dictionary(); foreach (var sample in samples) { if (!string.IsNullOrEmpty(sample.Name) && !_sampleCache.ContainsKey(sample.Name)) { _sampleCache.Add(sample.Name, sample); } } } public AudioSample GetSample(string name) { if (_sampleCache == null) Initialize(); if (_sampleCache.TryGetValue(name, out var sample)) { return sample; } return null; } } }