using GameCore.ECS; using GameCore.ECS.Interfaces; using GameCore.Events; using GameCore.Physics; using GameCore.Player; namespace GameCore.Inventory; public class PickupSystem : ISystem { public void Update(World world, float deltaTime) { var entitiesWithCollisions = world.GetEntitiesWith(); var withCollisions = entitiesWithCollisions.ToList(); foreach (var entity in withCollisions) { if (world.GetComponent(entity) == null) return; var collision = world.GetComponent(entity); if (collision == null) continue; var pickup = world.GetComponent(collision.OtherEntity); var inventory = world.GetComponent(entity); if (pickup == null || inventory == null) continue; world.PublishEvent(new ItemPickupAttemptEvent( entity, collision.OtherEntity, pickup.ItemId, pickup.Quantity )); } foreach (var entity in withCollisions) world.RemoveComponent(entity); } }