Rewrite and simplify Inventory Menu, various fixes for item effects

This commit is contained in:
2025-11-04 01:12:16 -08:00
parent 7b7fc910bd
commit a5846e08dc
49 changed files with 1070 additions and 826 deletions

View File

@@ -1,4 +1,6 @@
using Chickensoft.Collections;
using Godot;
using System;
using Zennysoft.Ma.Adapter;
using Zennysoft.Ma.Adapter.Entity;
@@ -17,6 +19,8 @@ public class EquipmentComponent : IEquipmentComponent
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;
@@ -51,6 +55,7 @@ public class EquipmentComponent : IEquipmentComponent
_equippedArmor.OnNext(armor);
if (equipable is Accessory accessory)
_equippedAccessory.OnNext(accessory);
EquipmentChanged?.Invoke(equipable);
}
public void Unequip(EquipableItem equipable)
@@ -61,6 +66,7 @@ public class EquipmentComponent : IEquipmentComponent
_equippedArmor.OnNext(new Armor());
if (equipable is Accessory accessory)
_equippedAccessory.OnNext(new Accessory());
EquipmentChanged?.Invoke(equipable);
}
public bool IsItemEquipped(InventoryItem item)

View File

@@ -60,11 +60,15 @@ public class HealthComponent : IHealthComponent
public void SetMaximumHealth(int health)
{
_maximumHP.OnNext(health);
if (_currentHP.Value > _maximumHP.Value)
_currentHP.OnNext(_maximumHP.Value);
}
public void RaiseMaximumHP(int raiseAmount)
public void RaiseMaximumHP(int raiseAmount, bool restoreHP = true)
{
_maximumHP.OnNext(raiseAmount);
Heal(raiseAmount);
_maximumHP.OnNext(_maximumHP.Value + raiseAmount);
if (restoreHP)
Heal(raiseAmount);
}
}

View File

@@ -49,9 +49,18 @@ public class VTComponent : IVTComponent
_currentVT.OnNext(cappedAmount);
}
public void RaiseMaximumVT(int raiseAmount)
public void RaiseMaximumVT(int raiseAmount, bool restoreVT = true)
{
_maximumVT.OnNext(raiseAmount);
Restore(raiseAmount);
_maximumVT.OnNext(_maximumVT.Value + raiseAmount);
if (restoreVT)
Restore(raiseAmount);
}
public void SetMaximumVT(int vt)
{
_maximumVT.OnNext(vt);
if (_currentVT.Value > _maximumVT.Value)
_currentVT.OnNext(_maximumVT.Value);
}
}