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 float AttackDamagePercentBonus; public float SpellDamagePercentBonus; public float CritChancePercentBonus; public float CritDamagePercentBonus; public float MaxHealthPercentBonus; public float ArmorPercentBonus; public float MagicResistancePercentBonus; public EquipmentType EquipmentType; [Space] public bool CraftableBase = false; [Space(20f)] [Header("Crafting-ish")] public int MinStrengthBonus; public int MaxStrengthBonus; [Space] public int MinAgilityBonus; public int MaxAgilityBonus; [Space] public int MinIntelligenceBonus; public int MaxIntelligenceBonus; [Space] public int MinSpiritBonus; public int MaxSpiritBonus; [Space] public int MinVitalityBonus; public int MaxVitalityBonus; [Space] [Space] public float MinStrengthPercentBonus; public float MaxStrengthPercentBonus; [Space] public float MinAgilityPercentBonus; public float MaxAgilityPercentBonus; [Space] public float MinIntelligencePercentBonus; public float MaxIntelligencePercentBonus; [Space] public float MinSpiritPercentBonus; public float MaxSpiritPercentBonus; [Space] public float MinVitalityPercentBonus; public float MaxVitalityPercentBonus; [Space] [Space] public int MinAttackDamageBonus; public int MaxAttackDamageBonus; [Space] public int MinSpellDamageBonus; public int MaxSpellDamageBonus; [Space] public int MinCritChanceBonus; public int MaxCritChanceBonus; [Space] public int MinCritDamageBonus; public int MaxCritDamageBonus; [Space] public int MinMaxHealthBonus; public int MaxMaxHealthBonus; [Space] public int MinArmorBonus; public int MaxArmorBonus; [Space] public int MinMagicResistanceBonus; public int MaxMagicResistanceBonus; [Space] [Space] public float MinAttackDamagePercentBonus; public float MaxAttackDamagePercentBonus; [Space] public float MinSpellDamagePercentBonus; public float MaxSpellDamagePercentBonus; [Space] public float MinCritChancePercentBonus; public float MaxCritChancePercentBonus; [Space] public float MinCritDamagePercentBonus; public float MaxCritDamagePercentBonus; [Space] public float MinMaxHealthPercentBonus; public float MaxMaxHealthPercentBonus; [Space] public float MinArmorPercentBonus; public float MaxArmorPercentBonus; [Space] public float MinMagicResistancePercentBonus; public float MaxMagicResistancePercentBonus; [Space] [Space] [Tooltip("Can only increase up to this number of unique stats in a single item instance.")] public int MaxTotalUniqueStatsIncreasedByStones; 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); } } }