Pedro Gomes 8917c36ad8 Character Stat revamp (wip)
- working max health, properly setting health component values and showing scales on UI
- working armor & magic resistance, properly mitigating incoming damage based on damage type
2024-08-13 22:36:01 +01:00

129 lines
5.6 KiB
C#

using UnityEngine;
namespace Kryz.CharacterStats.Examples
{
public enum EquipmentType
{
Helmet,
Chest,
Gloves,
Boots,
MainWeapon,
OffWeapon,
Accessory,
Amulet,
}
[CreateAssetMenu]
public class EquippableItem : Item
{
public int StrengthBonus;
public int AgilityBonus;
public int IntelligenceBonus;
public int SpiritBonus;
public int VitalityBonus;
[Space]
public float StrengthPercentBonus;
public float AgilityPercentBonus;
public float IntelligencePercentBonus;
public float SpiritPercentBonus;
public float VitalityPercentBonus;
[Space]
public int AttackDamageBonus;
public int SpellDamageBonus;
public int CritChanceBonus;
public int CritDamageBonus;
public int MaxHealthBonus;
public int ArmorBonus;
public int MagicResistanceBonus;
[Space]
public int AttackDamagePercentBonus;
public int SpellDamagePercentBonus;
public int CritChancePercentBonus;
public int CritDamagePercentBonus;
public int MaxHealthPercentBonus;
public int ArmorPercentBonus;
public int MagicResistancePercentBonus;
public EquipmentType EquipmentType;
public void Equip(PlayerCharacterStats c)
{
if (StrengthBonus != 0)
c.Strength.AddModifier(new StatModifier(StrengthBonus, StatModType.Flat, this));
if (AgilityBonus != 0)
c.Agility.AddModifier(new StatModifier(AgilityBonus, StatModType.Flat, this));
if (IntelligenceBonus != 0)
c.Intelligence.AddModifier(new StatModifier(IntelligenceBonus, StatModType.Flat, this));
if (SpiritBonus != 0)
c.Spirit.AddModifier(new StatModifier(SpiritBonus, StatModType.Flat, this));
if (VitalityBonus != 0)
c.Vitality.AddModifier(new StatModifier(VitalityBonus, StatModType.Flat, this));
if (StrengthPercentBonus != 0)
c.Strength.AddModifier(new StatModifier(StrengthPercentBonus, StatModType.PercentMult, this));
if (AgilityPercentBonus != 0)
c.Agility.AddModifier(new StatModifier(AgilityPercentBonus, StatModType.PercentMult, this));
if (IntelligencePercentBonus != 0)
c.Intelligence.AddModifier(new StatModifier(IntelligencePercentBonus, StatModType.PercentMult, this));
if (SpiritPercentBonus != 0)
c.Spirit.AddModifier(new StatModifier(SpiritPercentBonus, StatModType.PercentMult, this));
if (VitalityPercentBonus != 0)
c.Vitality.AddModifier(new StatModifier(VitalityPercentBonus, StatModType.PercentMult, this));
if (AttackDamageBonus != 0)
c.AttackDamage.AddModifier(new StatModifier(AttackDamageBonus, StatModType.Flat, this));
if (SpellDamageBonus != 0)
c.SpellDamage.AddModifier(new StatModifier(SpellDamageBonus, StatModType.Flat, this));
if (CritChanceBonus != 0)
c.CritChance.AddModifier(new StatModifier(CritChanceBonus, StatModType.Flat, this));
if (CritDamageBonus != 0)
c.CritDamage.AddModifier(new StatModifier(CritDamageBonus, StatModType.Flat, this));
if (MaxHealthBonus != 0)
c.MaxHealth.AddModifier(new StatModifier(MaxHealthBonus, StatModType.Flat, this));
if (ArmorBonus != 0)
c.Armor.AddModifier(new StatModifier(ArmorBonus, StatModType.Flat, this));
if (MagicResistanceBonus != 0)
c.MagicResistance.AddModifier(new StatModifier(MagicResistanceBonus, StatModType.Flat, this));
if (AttackDamagePercentBonus != 0)
c.AttackDamage.AddModifier(new StatModifier(AttackDamagePercentBonus, StatModType.PercentAdd, this));
if (SpellDamagePercentBonus != 0)
c.SpellDamage.AddModifier(new StatModifier(SpellDamagePercentBonus, StatModType.PercentAdd, this));
if (CritChancePercentBonus != 0)
c.CritChance.AddModifier(new StatModifier(CritChancePercentBonus, StatModType.PercentAdd, this));
if (CritDamagePercentBonus != 0)
c.CritDamage.AddModifier(new StatModifier(CritDamagePercentBonus, StatModType.PercentAdd, this));
if (MaxHealthPercentBonus != 0)
c.MaxHealth.AddModifier(new StatModifier(MaxHealthPercentBonus, StatModType.PercentAdd, this));
if (ArmorPercentBonus != 0)
c.Armor.AddModifier(new StatModifier(ArmorPercentBonus, StatModType.PercentAdd, this));
if (MagicResistancePercentBonus != 0)
c.MagicResistance.AddModifier(new StatModifier(MagicResistancePercentBonus, StatModType.PercentAdd, this));
}
public void Unequip(PlayerCharacterStats c)
{
c.Strength.RemoveAllModifiersFromSource(this);
c.Agility.RemoveAllModifiersFromSource(this);
c.Intelligence.RemoveAllModifiersFromSource(this);
c.Spirit.RemoveAllModifiersFromSource(this);
c.Vitality.RemoveAllModifiersFromSource(this);
c.AttackDamage.RemoveAllModifiersFromSource(this);
c.SpellDamage.RemoveAllModifiersFromSource(this);
c.CritChance.RemoveAllModifiersFromSource(this);
c.CritDamage.RemoveAllModifiersFromSource(this);
c.MaxHealth.RemoveAllModifiersFromSource(this);
c.Armor.RemoveAllModifiersFromSource(this);
c.MagicResistance.RemoveAllModifiersFromSource(this);
}
}
}