using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; namespace Kryz.CharacterStats.Examples { public class CharacterStats : MonoBehaviour { //Primary public CharacterStat Strength; public CharacterStat Agility; public CharacterStat Intelligence; public CharacterStat Spirit; public CharacterStat Vitality; //Secondary public CharacterStat CritChance; public CharacterStat CritDamage; public CharacterStat AttackDamage; public CharacterStat SpellDamage; public CharacterStat MaxHealth; public CharacterStat Armor; public CharacterStat MagicResistance; public Dictionary statsDictionary = new Dictionary(); public UnityEvent onUpdateStatValues = new UnityEvent(); protected virtual void Awake() { statsDictionary.Add(nameof(Strength).ToLower(), Strength); statsDictionary.Add(nameof(Agility).ToLower(), Agility); statsDictionary.Add(nameof(Intelligence).ToLower(), Intelligence); statsDictionary.Add(nameof(Spirit).ToLower(), Spirit); statsDictionary.Add(nameof(Vitality).ToLower(), Vitality); statsDictionary.Add(nameof(CritChance).ToLower(), CritChance); statsDictionary.Add(nameof(CritDamage).ToLower(), CritDamage); statsDictionary.Add(nameof(AttackDamage).ToLower(), AttackDamage); statsDictionary.Add(nameof(SpellDamage).ToLower(), SpellDamage); statsDictionary.Add(nameof(MaxHealth).ToLower(), MaxHealth); statsDictionary.Add(nameof(Armor).ToLower(), Armor); statsDictionary.Add(nameof(MagicResistance).ToLower(), MagicResistance); onUpdateStatValues.AddListener(UpdateSecondaryStatsBasedOnPrimaryStats); } public void IncreaseAllStatPoints(int amount) { Strength.BaseValue += amount; Agility.BaseValue += amount; Intelligence.BaseValue += amount; Spirit.BaseValue += amount; Vitality.BaseValue += amount; onUpdateStatValues.Invoke(); } public void UpdateSecondaryStatsBasedOnPrimaryStats() { AttackDamage.RemoveAllModifiersFromSource(GameConstants.ObjectSources.StrengthSource); Strength.RemoveAllModifiersFromSource(GameConstants.ObjectSources.LevelSource); Agility.RemoveAllModifiersFromSource(GameConstants.ObjectSources.LevelSource); Intelligence.RemoveAllModifiersFromSource(GameConstants.ObjectSources.LevelSource); Spirit.RemoveAllModifiersFromSource(GameConstants.ObjectSources.LevelSource); Vitality.RemoveAllModifiersFromSource(GameConstants.ObjectSources.LevelSource); //Strength.AddModifier(new StatModifier((level.currentLevel - 1), StatModType.Flat, GameConstants.ObjectSources.LevelSource)); //Agility.AddModifier(new StatModifier((level.currentLevel - 1), StatModType.Flat, GameConstants.ObjectSources.LevelSource)); //Intelligence.AddModifier(new StatModifier((level.currentLevel - 1), StatModType.Flat, GameConstants.ObjectSources.LevelSource)); //Spirit.AddModifier(new StatModifier((level.currentLevel - 1), StatModType.Flat, GameConstants.ObjectSources.LevelSource)); //Vitality.AddModifier(new StatModifier((level.currentLevel - 1), StatModType.Flat, GameConstants.ObjectSources.LevelSource)); } } }