39 lines
1.1 KiB
C#
39 lines
1.1 KiB
C#
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<AddItemToInventoryEvent>(OnItemAdded);
|
|
}
|
|
|
|
public void Update(World world, float deltaTime)
|
|
{
|
|
}
|
|
|
|
private void OnItemAdded(AddItemToInventoryEvent e)
|
|
{
|
|
if (!e.Item.ItemId.StartsWith(WeaponItemPrefix)) return;
|
|
|
|
var equipment = _world.GetComponent<EquipmentComponent>(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));
|
|
}
|
|
}
|
|
} |