133 lines
8.0 KiB
C#
133 lines
8.0 KiB
C#
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 AttackDamage;
|
|
public CharacterStat SpellDamage;
|
|
|
|
public CharacterStat CritChance;
|
|
public CharacterStat CritDamage;
|
|
|
|
public CharacterStat MaxHealth;
|
|
public CharacterStat Armor;
|
|
public CharacterStat MagicResistance;
|
|
|
|
//Awakening Related
|
|
//public CharacterStat
|
|
|
|
public Dictionary<string, CharacterStat> primaryStatsDictionary = new Dictionary<string, CharacterStat>();
|
|
public Dictionary<string, CharacterStat> secondaryStatsDictionary = new Dictionary<string, CharacterStat>();
|
|
|
|
public UnityEvent onUpdateStatValues = new UnityEvent();
|
|
|
|
protected virtual void Awake()
|
|
{
|
|
primaryStatsDictionary.Add(nameof(Strength).ToLower(), Strength);
|
|
primaryStatsDictionary.Add(nameof(Agility).ToLower(), Agility);
|
|
primaryStatsDictionary.Add(nameof(Intelligence).ToLower(), Intelligence);
|
|
primaryStatsDictionary.Add(nameof(Spirit).ToLower(), Spirit);
|
|
primaryStatsDictionary.Add(nameof(Vitality).ToLower(), Vitality);
|
|
|
|
|
|
secondaryStatsDictionary.Add(nameof(AttackDamage).ToLower(), AttackDamage);
|
|
secondaryStatsDictionary.Add(nameof(SpellDamage).ToLower(), SpellDamage);
|
|
|
|
secondaryStatsDictionary.Add(nameof(CritChance).ToLower(), CritChance);
|
|
secondaryStatsDictionary.Add(nameof(CritDamage).ToLower(), CritDamage);
|
|
|
|
secondaryStatsDictionary.Add(nameof(MaxHealth).ToLower(), MaxHealth);
|
|
secondaryStatsDictionary.Add(nameof(Armor).ToLower(), Armor);
|
|
secondaryStatsDictionary.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()
|
|
{
|
|
//Remove previous
|
|
AttackDamage.RemoveAllModifiersFromSource(GameConstants.ObjectSources.StrengthSource);
|
|
AttackDamage.RemoveAllModifiersFromSource(GameConstants.ObjectSources.AgilitySource);
|
|
|
|
SpellDamage.RemoveAllModifiersFromSource(GameConstants.ObjectSources.IntelligenceSource);
|
|
SpellDamage.RemoveAllModifiersFromSource(GameConstants.ObjectSources.SpiritSource);
|
|
|
|
CritChance.RemoveAllModifiersFromSource(GameConstants.ObjectSources.AgilitySource);
|
|
CritChance.RemoveAllModifiersFromSource(GameConstants.ObjectSources.IntelligenceSource);
|
|
|
|
CritDamage.RemoveAllModifiersFromSource(GameConstants.ObjectSources.StrengthSource);
|
|
CritDamage.RemoveAllModifiersFromSource(GameConstants.ObjectSources.AgilitySource);
|
|
CritDamage.RemoveAllModifiersFromSource(GameConstants.ObjectSources.IntelligenceSource);
|
|
|
|
MaxHealth.RemoveAllModifiersFromSource(GameConstants.ObjectSources.SpiritSource);
|
|
MaxHealth.RemoveAllModifiersFromSource(GameConstants.ObjectSources.VitalitySource);
|
|
|
|
Armor.RemoveAllModifiersFromSource(GameConstants.ObjectSources.StrengthSource);
|
|
Armor.RemoveAllModifiersFromSource(GameConstants.ObjectSources.AgilitySource);
|
|
Armor.RemoveAllModifiersFromSource(GameConstants.ObjectSources.VitalitySource);
|
|
|
|
MagicResistance.RemoveAllModifiersFromSource(GameConstants.ObjectSources.IntelligenceSource);
|
|
MagicResistance.RemoveAllModifiersFromSource(GameConstants.ObjectSources.SpiritSource);
|
|
MagicResistance.RemoveAllModifiersFromSource(GameConstants.ObjectSources.VitalitySource);
|
|
|
|
|
|
//Add new values
|
|
AttackDamage.AddModifier(new StatModifier(Strength.Value * GameConstants.CharacterStatsBalancing.AttackDamageIncreaseFromStrength, StatModType.Flat, GameConstants.ObjectSources.StrengthSource));
|
|
AttackDamage.AddModifier(new StatModifier(Agility.Value * GameConstants.CharacterStatsBalancing.AttackDamageIncreaseFromAgility, StatModType.Flat, GameConstants.ObjectSources.AgilitySource));
|
|
|
|
SpellDamage.AddModifier(new StatModifier(Intelligence.Value * GameConstants.CharacterStatsBalancing.SpellDamageIncreaseFromIntelligence, StatModType.Flat, GameConstants.ObjectSources.IntelligenceSource));
|
|
SpellDamage.AddModifier(new StatModifier(Spirit.Value * GameConstants.CharacterStatsBalancing.SpellDamageIncreaseFromSpirit, StatModType.Flat, GameConstants.ObjectSources.SpiritSource));
|
|
|
|
CritChance.AddModifier(new StatModifier(Agility.Value * GameConstants.CharacterStatsBalancing.CritChanceIncreaseFromAgility, StatModType.Flat, GameConstants.ObjectSources.AgilitySource));
|
|
CritChance.AddModifier(new StatModifier(Intelligence.Value * GameConstants.CharacterStatsBalancing.CritChanceIncreaseFromIntelligence, StatModType.Flat, GameConstants.ObjectSources.IntelligenceSource));
|
|
|
|
//CritDamage.AddModifier(new StatModifier(Strength.Value * GameConstants.CharacterStatsBalancing.CritDamageIncreaseFromStrength, StatModType.Flat, GameConstants.ObjectSources.StrengthSource));
|
|
//CritDamage.AddModifier(new StatModifier(Agility.Value * GameConstants.CharacterStatsBalancing.CritDamageIncreaseFromAgility, StatModType.Flat, GameConstants.ObjectSources.AgilitySource));
|
|
//CritDamage.AddModifier(new StatModifier(Intelligence.Value * GameConstants.CharacterStatsBalancing.CritDamageIncreaseFromIntelligence, StatModType.Flat, GameConstants.ObjectSources.IntelligenceSource));
|
|
|
|
MaxHealth.AddModifier(new StatModifier(Spirit.Value * GameConstants.CharacterStatsBalancing.MaxHealthIncreaseFromSpirit, StatModType.Flat, GameConstants.ObjectSources.SpiritSource));
|
|
MaxHealth.AddModifier(new StatModifier(Vitality.Value * GameConstants.CharacterStatsBalancing.MaxHealthIncreaseFromVitality, StatModType.Flat, GameConstants.ObjectSources.VitalitySource));
|
|
|
|
//Armor.AddModifier(new StatModifier(Strength.Value * GameConstants.CharacterStatsBalancing.ArmorIncreaseFromStrength, StatModType.Flat, GameConstants.ObjectSources.StrengthSource));
|
|
//Armor.AddModifier(new StatModifier(Agility.Value * GameConstants.CharacterStatsBalancing.ArmorIncreaseFromAgility, StatModType.Flat, GameConstants.ObjectSources.AgilitySource));
|
|
//Armor.AddModifier(new StatModifier(Vitality.Value * GameConstants.CharacterStatsBalancing.ArmorIncreaseFromVitality, StatModType.Flat, GameConstants.ObjectSources.VitalitySource));
|
|
|
|
//MagicResistance.AddModifier(new StatModifier(Intelligence.Value * GameConstants.CharacterStatsBalancing.MagicResistanceIncreaseFromIntelligence, StatModType.Flat, GameConstants.ObjectSources.IntelligenceSource));
|
|
MagicResistance.AddModifier(new StatModifier(Spirit.Value * GameConstants.CharacterStatsBalancing.MagicResistanceIncreaseFromSpirit, StatModType.Flat, GameConstants.ObjectSources.SpiritSource));
|
|
//MagicResistance.AddModifier(new StatModifier(Vitality.Value * GameConstants.CharacterStatsBalancing.MagicResistanceIncreaseFromVitality, StatModType.Flat, GameConstants.ObjectSources.VitalitySource));
|
|
|
|
|
|
Debug.Log(this.gameObject.name + " has relative power level of: " + GetRelativePowerLevel());
|
|
}
|
|
|
|
public float GetRelativePowerLevel()
|
|
{
|
|
return AttackDamage.Value * 1.1f + SpellDamage.Value * 1.1f + (CritDamage.Value * (CritChance.Value / 100f)) + MaxHealth.Value * 1f + Armor.Value * 1f + MagicResistance.Value * 1f;
|
|
}
|
|
|
|
}
|
|
} |