using GameCore.ECS; using GameCore.Events; using GameCore.Interaction.Interfaces; using GameCore.Inventory; namespace GameCore.Interaction; public class RequiresItemRequirement(string itemId, int quantity, bool consumeItem) : IInteractionRequirement { public bool IsMet(Entity interactor, World world) { var inventory = world.GetComponent(interactor); return inventory != null && inventory.HasItem(itemId, quantity); } public void ApplySideEffects(Entity interactor, World world) { if (!consumeItem) return; var inventory = world.GetComponent(interactor); if (inventory == null || !inventory.RemoveItem(itemId, quantity)) return; var newQuantity = inventory.GetItemCount(itemId); world.PublishEvent(new InventoryItemChangedEvent(interactor, itemId, newQuantity)); } }