using Chickensoft.AutoInject; using Chickensoft.Introspection; using Godot; using System.Collections.Generic; [Meta(typeof(IAutoNode)), Id("sfx_database")] public partial class SfxDatabase : Node { public override void _Notification(int what) => this.Notify(what); private static SfxDatabase _instance; public static SfxDatabase Instance => _instance; public void OnReady() { if (_instance != null) QueueFree(); _instance = this; _sfxMap = new Dictionary { {SoundEffect.HealHP, HealHPSound }, {SoundEffect.TakeDamage, TakeDamageSound }, {SoundEffect.HealVT, HealVTSound }, {SoundEffect.IncreaseStat, IncreaseStatSound }, {SoundEffect.Crit, CritSound }, {SoundEffect.PickupItem, PickupItemSound }, {SoundEffect.OpenInventory, OpenInventorySound }, {SoundEffect.MoveUI, MoveSound }, {SoundEffect.Equip, EquipSound }, {SoundEffect.Unequip, UnequipSound }, {SoundEffect.SortInventory, SortSound }, {SoundEffect.SelectUI, SelectSound }, {SoundEffect.CancelUI, CancelSound }, {SoundEffect.LevelUp, LevelUpSound }, {SoundEffect.Transfer, TransferItemSound }, {SoundEffect.RecallEnemies, RecallEnemiesSound}, {SoundEffect.KillHalfEnemies, KillHalfEnemiesSound}, {SoundEffect.TeleportToRandomRoom, TeleportToRandomRoomSound}, {SoundEffect.TeleportToExit, TeleportToExitSound}, {SoundEffect.AbsorbHPFromAllEnemies, AbsorbHPFromAllEnemiesSound}, {SoundEffect.TurnAllEnemiesIntoHealingItems, TurnAllEnemiesIntoHealingItemsSound}, {SoundEffect.WeaponQuickSlash, WeaponQuickSlashSound }, {SoundEffect.WeaponSlowSlash, WeaponSlowSlashSound }, }; } [Node] private AudioStreamPlayer HealHPSound { get; set; } = default!; [Node] private AudioStreamPlayer TakeDamageSound { get; set; } = default!; [Node] private AudioStreamPlayer HealVTSound { get; set; } = default!; [Node] private AudioStreamPlayer IncreaseStatSound { get; set; } = default!; [Node] private AudioStreamPlayer WeaponQuickSlashSound { get; set; } = default!; [Node] private AudioStreamPlayer WeaponSlowSlashSound { get; set; } = default!; [Node] private AudioStreamPlayer CritSound { get; set; } = default!; [Node] private AudioStreamPlayer PickupItemSound { get; set; } = default!; [Node] private AudioStreamPlayer OpenInventorySound { get; set; } [Node] private AudioStreamPlayer MoveSound { get; set; } [Node] private AudioStreamPlayer EquipSound { get; set; } [Node] private AudioStreamPlayer UnequipSound { get; set; } [Node] private AudioStreamPlayer SortSound { get; set; } [Node] private AudioStreamPlayer SelectSound { get; set; } [Node] private AudioStreamPlayer CancelSound { get; set; } [Node] private AudioStreamPlayer LevelUpSound { get; set; } [Node] private AudioStreamPlayer TransferItemSound { get; set; } [Node] private AudioStreamPlayer RecallEnemiesSound { get; set; } [Node] private AudioStreamPlayer KillHalfEnemiesSound { get; set; } [Node] private AudioStreamPlayer TeleportToRandomRoomSound { get; set; } [Node] private AudioStreamPlayer TeleportToExitSound { get; set; } [Node] private AudioStreamPlayer AbsorbHPFromAllEnemiesSound { get; set; } [Node] private AudioStreamPlayer SwapHPAndVTSound { get; set; } [Node] private AudioStreamPlayer TurnAllEnemiesIntoHealingItemsSound { get; set; } private Dictionary _sfxMap; public void Play(SoundEffect soundEffect) { _sfxMap.TryGetValue(soundEffect, out var audio); if (audio != null) audio.Play(); } } public enum SoundEffect { HealHP, TakeDamage, HealVT, IncreaseStat, Crit, PickupItem, OpenInventory, MoveUI, Equip, Unequip, SortInventory, SelectUI, CancelUI, LevelUp, Transfer, RecallEnemies, KillHalfEnemies, TeleportToRandomRoom, TeleportToExit, AbsorbHPFromAllEnemies, SwapHPAndVT, TurnAllEnemiesIntoHealingItems, WeaponQuickSlash, WeaponSlowSlash }