using GameCore.Combat.Interfaces; using GameCore.Events; using GameCore.Inventory; namespace GameCore.Combat.Effects; public class ConsumeAmmoCost(string ammoId, int amount) : ICostEffect { 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); } }