using GameCore.ECS; using GameCore.ECS.Interfaces; using GameCore.Events; using GameCore.Input; using GameCore.Player; namespace GameCore.Combat; public class WeaponSwapSystem : ISystem { public void Update(World world, float deltaTime) { var entities = world.GetEntitiesWith(); foreach (var entity in entities) { var input = world.GetComponent(entity); var equipment = world.GetComponent(entity); if (input == null || equipment == null || equipment.EquippableWeaponItemIds.Count <= 1) continue; var direction = SwapDirection.None; if (input.IsSwapWeaponNext) direction = SwapDirection.Next; if (input.IsSwapWeaponPrevious) direction = SwapDirection.Previous; if (direction != SwapDirection.None) { var newIndex = equipment.CurrentWeaponIndex + (int)direction; var weaponCount = equipment.EquippableWeaponItemIds.Count; if (newIndex >= weaponCount) newIndex = 0; if (newIndex < 0) newIndex = weaponCount - 1; if (newIndex != equipment.CurrentWeaponIndex) { equipment.CurrentWeaponIndex = newIndex; var newWeaponId = equipment.EquippableWeaponItemIds[newIndex]; world.PublishEvent(new EquipWeaponEvent(entity, newWeaponId)); } } } } private enum SwapDirection { None = 0, Next = 1, Previous = -1 } }