80 lines
2.7 KiB
C#
80 lines
2.7 KiB
C#
using Chickensoft.Collections;
|
|
using Godot;
|
|
using System;
|
|
using Zennysoft.Ma.Adapter;
|
|
using Zennysoft.Ma.Adapter.Entity;
|
|
|
|
namespace Zennysoft.Game.Ma;
|
|
public class EquipmentComponent : IEquipmentComponent
|
|
{
|
|
public IAutoProp<EquipableItem> EquippedWeapon => _equippedWeapon;
|
|
|
|
public IAutoProp<EquipableItem> EquippedArmor => _equippedArmor;
|
|
|
|
public IAutoProp<EquipableItem> EquippedAccessory => _equippedAccessory;
|
|
|
|
public AutoProp<EquipableItem> _equippedWeapon;
|
|
|
|
public AutoProp<EquipableItem> _equippedArmor;
|
|
|
|
public AutoProp<EquipableItem> _equippedAccessory;
|
|
|
|
public event Action<EquipableItem> 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<EquipableItem>(new Weapon());
|
|
_equippedArmor = new AutoProp<EquipableItem>(new Armor());
|
|
_equippedAccessory = new AutoProp<EquipableItem>(new Accessory());
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
_equippedWeapon.OnNext(new Weapon());
|
|
_equippedArmor.OnNext(new Armor());
|
|
_equippedAccessory.OnNext(new Accessory());
|
|
}
|
|
|
|
public void Equip(EquipableItem 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);
|
|
EquipmentChanged?.Invoke(equipable);
|
|
}
|
|
|
|
public void Unequip(EquipableItem 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());
|
|
EquipmentChanged?.Invoke(equipable);
|
|
}
|
|
|
|
public bool IsItemEquipped(InventoryItem item)
|
|
{
|
|
if (item is not EquipableItem)
|
|
return false;
|
|
|
|
return item == _equippedWeapon.Value || item == _equippedArmor.Value || item == _equippedAccessory.Value;
|
|
}
|
|
}
|