using Chickensoft.Introspection; using Zennysoft.Game.Abstractions; namespace Zennysoft.Ma.Adapter; public partial class InGameAudioLogic { [Meta] public partial record Enabled : State { public Enabled() { OnAttach(() => { var player = Get(); OnOverworldEntered(); var gameEventDepot = Get(); var gameRepo = Get(); gameEventDepot.OverworldEntered += OnOverworldEntered; gameEventDepot.DungeonAThemeAreaEntered += OnDungeonAThemeEntered; gameEventDepot.MenuScrolled += OnMenuScrolled; gameEventDepot.MenuBackedOut += OnMenuBackedOut; player.EquippedWeapon.Changed += OnEquippedItem; player.EquippedArmor.Changed += OnEquippedItem; player.EquippedAccessory.Changed += OnEquippedItem; gameEventDepot.InventorySorted += OnInventorySorted; gameEventDepot.HealingItemConsumed += OnHealingItemConsumed; gameEventDepot.RestorativePickedUp += OnRestorativePickedUp; gameEventDepot.TeleportEntered += OnTeleportEntered; gameRepo.PlayerAttack += OnPlayerAttack; gameRepo.PlayerAttackedWall += OnPlayerAttackWall; }); OnDetach(() => { var gameEventDepot = Get(); var player = Get(); var gameRepo = Get(); gameEventDepot.OverworldEntered -= OnOverworldEntered; gameEventDepot.DungeonAThemeAreaEntered -= OnDungeonAThemeEntered; gameEventDepot.MenuScrolled -= OnMenuScrolled; gameEventDepot.MenuBackedOut -= OnMenuBackedOut; player.EquippedWeapon.Changed -= OnEquippedItem; player.EquippedArmor.Changed -= OnEquippedItem; player.EquippedAccessory.Changed -= OnEquippedItem; gameEventDepot.InventorySorted -= OnInventorySorted; gameEventDepot.TeleportEntered -= OnTeleportEntered; gameRepo.PlayerAttack -= OnPlayerAttack; gameRepo.PlayerAttackedWall -= OnPlayerAttackWall; }); } private void OnPlayerAttack() => Output(new Output.PlayPlayerAttackSound()); private void OnPlayerAttackWall() => Output(new Output.PlayPlayerAttackWallSound()); private void OnRestorativePickedUp(IHealthPack restorative) => Output(new Output.PlayHealingItemSound()); private void OnMenuBackedOut() => Output(new Output.PlayMenuBackSound()); private void OnHealingItemConsumed(InventoryItem stats) => Output(new Output.PlayHealingItemSound()); private void OnInventorySorted() => Output(new Output.PlayInventorySortedSound()); private void OnEquippedItem(InventoryItem equipableItem) => Output(new Output.PlayEquipSound()); private void OnOverworldEntered() => Output(new Output.PlayOverworldMusic()); private void OnDungeonAThemeEntered() => Output(new Output.PlayDungeonThemeAMusic()); private void OnMenuScrolled() => Output(new Output.PlayMenuScrollSound()); private void OnTeleportEntered() => Output(new Output.PlayTeleportSound()); } }