93 lines
3.4 KiB
C#
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);
|
|
}
|
|
}
|