- 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
129 lines
5.6 KiB
C#
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);
|
|
}
|
|
}
|
|
} |