using GameCore.Combat.Interfaces; using GameCore.Events; using GameCore.Inventory; namespace GameCore.Combat.Effects; public class ConsumeAmmoCost(string ammoId, int amount) : ICostEffect { public readonly string AmmoId = ammoId; public void Execute(EffectContext context) { var inventory = context.World.GetComponent(context.Owner); if (inventory == null) return; inventory.RemoveItem(AmmoId, amount); var newQuantity = inventory.GetItemCount(AmmoId); context.World.PublishEvent(new InventoryItemChangedEvent(context.Owner, AmmoId, newQuantity)); } public bool CanAfford(EffectContext context) { var inventory = context.World.GetComponent(context.Owner); return inventory != null && inventory.HasItem(AmmoId, amount); } }