using GameCore.ECS; using GameCore.ECS.Interfaces; using GameCore.Events; using GameCore.Player; namespace GameCore.Combat; public class WeaponAcquisitionSystem : ISystem { private const string WeaponItemPrefix = "weapon_"; private readonly World _world; public WeaponAcquisitionSystem(World world) { _world = world; _world.Subscribe(OnItemAdded); } public void Update(World world, float deltaTime) { } private void OnItemAdded(AddItemToInventoryEvent e) { if (!e.Item.ItemId.StartsWith(WeaponItemPrefix)) return; var equipment = _world.GetComponent(e.Target); if (equipment == null) return; if (!equipment.EquippableWeaponItemIds.Contains(e.Item.ItemId)) equipment.EquippableWeaponItemIds.Add(e.Item.ItemId); if (equipment.CurrentWeaponIndex == -1) { equipment.CurrentWeaponIndex = equipment.EquippableWeaponItemIds.Count - 1; _world.PublishEvent(new EquipWeaponEvent(e.Target, e.Item.ItemId)); } } }