Files
GameJamDungeon/Zennysoft.Game.Ma/src/Components/EquipmentComponent.cs
2026-02-13 15:59:10 -08:00

93 lines
3.4 KiB
C#

using Chickensoft.Collections;
using System;
using Zennysoft.Ma.Adapter;
using Zennysoft.Ma.Adapter.Entity;
namespace Zennysoft.Game.Ma;
public class EquipmentComponent : IEquipmentComponent
{
public IAutoProp<IWeapon> EquippedWeapon => _equippedWeapon;
public IAutoProp<IArmor> EquippedArmor => _equippedArmor;
public IAutoProp<IAccessory> EquippedAccessory => _equippedAccessory;
public IAutoProp<IEquipableItem> EquippedAmmo => _equippedAmmo;
public AutoProp<IWeapon> _equippedWeapon;
public AutoProp<IArmor> _equippedArmor;
public AutoProp<IAccessory> _equippedAccessory;
public AutoProp<IEquipableItem> _equippedAmmo;
public event Action<IEquipableItem> EquipmentChanged;
public int BonusAttack => _equippedWeapon.Value.BonusAttack + _equippedArmor.Value.BonusAttack + _equippedAccessory.Value.BonusAttack;
public int BonusDefense => _equippedWeapon.Value.BonusDefense + _equippedArmor.Value.BonusDefense + _equippedAccessory.Value.BonusDefense;
public int BonusHP => _equippedWeapon.Value.BonusHP + _equippedArmor.Value.BonusHP + _equippedAccessory.Value.BonusHP;
public int BonusVT => _equippedWeapon.Value.BonusVT + _equippedArmor.Value.BonusVT + _equippedAccessory.Value.BonusVT;
public int BonusLuck => _equippedWeapon.Value.BonusLuck + _equippedArmor.Value.BonusLuck + _equippedAccessory.Value.BonusLuck;
public ElementalResistanceSet ElementalResistance => _equippedWeapon.Value.ElementalResistance + _equippedArmor.Value.ElementalResistance + _equippedAccessory.Value.ElementalResistance;
public EquipmentComponent()
{
_equippedWeapon = new AutoProp<IWeapon>(new Weapon());
_equippedArmor = new AutoProp<IArmor>(new Armor());
_equippedAccessory = new AutoProp<IAccessory>(new Accessory());
_equippedAmmo = new AutoProp<IEquipableItem>(new Ammo());
}
public void Reset()
{
_equippedWeapon.OnNext(new Weapon());
_equippedArmor.OnNext(new Armor());
_equippedAccessory.OnNext(new Accessory());
_equippedAmmo.OnNext(new Ammo());
}
public void Equip(IEquipableItem equipable)
{
if (equipable is Weapon weapon)
_equippedWeapon.OnNext(weapon);
if (equipable is Armor armor)
_equippedArmor.OnNext(armor);
if (equipable is Accessory accessory)
_equippedAccessory.OnNext(accessory);
if (equipable is Ammo ammo)
_equippedAmmo.OnNext(ammo);
EquipmentChanged?.Invoke(equipable);
}
public void Unequip(IEquipableItem equipable)
{
if (equipable is Weapon weapon)
_equippedWeapon.OnNext(new Weapon());
if (equipable is Armor armor)
_equippedArmor.OnNext(new Armor());
if (equipable is Accessory accessory)
_equippedAccessory.OnNext(new Accessory());
if (equipable is Ammo ammo)
_equippedAmmo.OnNext(new Ammo());
EquipmentChanged?.Invoke(equipable);
}
public bool IsItemEquipped(IEquipableItem item)
{
return item == _equippedWeapon.Value || item == _equippedArmor.Value || item == _equippedAccessory.Value || item == _equippedAmmo.Value;
}
public void UpdateEquipment(IEquipableItem equipable) => EquipmentChanged?.Invoke(equipable);
public bool AugmentableEquipmentExists()
{
return (_equippedWeapon.Value.ItemName != null && _equippedWeapon.Value.Augment == null) || (_equippedArmor.Value.ItemName != null && _equippedArmor.Value.Augment == null) || (_equippedAccessory.Value.ItemName != null && _equippedAccessory.Value.Augment == null);
}
}