- scrolling combat text - updated inventory and stat panel UIs - bugfix regens - small changes to lighting in skellyard.
167 lines
9.2 KiB
C#
167 lines
9.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
namespace Kryz.CharacterStats.Examples
|
|
{
|
|
|
|
public class CharacterStats : MonoBehaviour
|
|
{
|
|
[Header("---------------------------------------------------------------------------------------------")]
|
|
[Header("Primary Stats:")]
|
|
public CharacterStat Cunning;
|
|
public CharacterStat Flow;
|
|
public CharacterStat Presence;
|
|
|
|
//Secondary
|
|
[Space]
|
|
[Header("---------------------------------------------------------------------------------------------")]
|
|
[Header("Offensive Stats:")]
|
|
[Space]
|
|
public CharacterStat AttackDamage;
|
|
public CharacterStat SpellDamage;
|
|
|
|
public CharacterStat AttackSpeed;
|
|
|
|
|
|
public CharacterStat CritChance;
|
|
public CharacterStat CritDamage;
|
|
|
|
public CharacterStat AuraPower;
|
|
|
|
[Space]
|
|
[Header("---------------------------------------------------------------------------------------------")]
|
|
[Header("Resource Stats:")]
|
|
[Space]
|
|
public CharacterStat MaxHealth;
|
|
public CharacterStat HealthRegen;
|
|
public CharacterStat MaxMana;
|
|
public CharacterStat ManaRegen;
|
|
|
|
[Space]
|
|
[Header("---------------------------------------------------------------------------------------------")]
|
|
[Header("Defensive Stats:")]
|
|
[Space]
|
|
public CharacterStat Armor;
|
|
public CharacterStat MagicResistance;
|
|
public CharacterStat DodgeChance;
|
|
public CharacterStat BlockChance;
|
|
public CharacterStat BlockEffectiveness;
|
|
|
|
[Space]
|
|
[Header("---------------------------------------------------------------------------------------------")]
|
|
[Header("Misc Stats:")]
|
|
[Space]
|
|
public CharacterStat AreaEffectiveness;
|
|
public CharacterStat CooldownReduction;
|
|
public CharacterStat MovementSpeed;
|
|
public CharacterStat ReputationGainIncrease;
|
|
public CharacterStat GoldCostReduction;
|
|
|
|
|
|
//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();
|
|
public UnityEvent onAllStatsUpdated = new UnityEvent();
|
|
|
|
protected virtual void Awake()
|
|
{
|
|
primaryStatsDictionary.Add(nameof(Cunning).ToLower(), Cunning);
|
|
primaryStatsDictionary.Add(nameof(Flow).ToLower(), Flow);
|
|
primaryStatsDictionary.Add(nameof(Presence).ToLower(), Presence);
|
|
|
|
|
|
|
|
secondaryStatsDictionary.Add(nameof(AttackDamage).ToLower(), AttackDamage);
|
|
secondaryStatsDictionary.Add(nameof(SpellDamage).ToLower(), SpellDamage);
|
|
secondaryStatsDictionary.Add(nameof(AttackSpeed).ToLower(), AttackSpeed);
|
|
|
|
secondaryStatsDictionary.Add(nameof(CritChance).ToLower(), CritChance);
|
|
secondaryStatsDictionary.Add(nameof(CritDamage).ToLower(), CritDamage);
|
|
secondaryStatsDictionary.Add(nameof(AuraPower).ToLower(), AuraPower);
|
|
|
|
secondaryStatsDictionary.Add(nameof(HealthRegen).ToLower(), HealthRegen);
|
|
secondaryStatsDictionary.Add(nameof(ManaRegen).ToLower(), ManaRegen);
|
|
secondaryStatsDictionary.Add(nameof(MaxHealth).ToLower(), MaxHealth);
|
|
secondaryStatsDictionary.Add(nameof(MaxMana).ToLower(), MaxMana);
|
|
|
|
secondaryStatsDictionary.Add(nameof(Armor).ToLower(), Armor);
|
|
secondaryStatsDictionary.Add(nameof(MagicResistance).ToLower(), MagicResistance);
|
|
secondaryStatsDictionary.Add(nameof(DodgeChance).ToLower(), DodgeChance);
|
|
secondaryStatsDictionary.Add(nameof(BlockChance).ToLower(), BlockChance);
|
|
secondaryStatsDictionary.Add(nameof(BlockEffectiveness).ToLower(), BlockEffectiveness);
|
|
|
|
secondaryStatsDictionary.Add(nameof(AreaEffectiveness).ToLower(), AreaEffectiveness);
|
|
secondaryStatsDictionary.Add(nameof(CooldownReduction).ToLower(), CooldownReduction);
|
|
secondaryStatsDictionary.Add(nameof(MovementSpeed).ToLower(), MovementSpeed);
|
|
secondaryStatsDictionary.Add(nameof(ReputationGainIncrease).ToLower(), ReputationGainIncrease);
|
|
secondaryStatsDictionary.Add(nameof(GoldCostReduction).ToLower(), GoldCostReduction);
|
|
|
|
onUpdateStatValues.AddListener(UpdateSecondaryStatsBasedOnPrimaryStats);
|
|
}
|
|
|
|
public void IncreaseAllStatPoints(int amount)
|
|
{
|
|
|
|
onUpdateStatValues.Invoke();
|
|
}
|
|
|
|
public void UpdateSecondaryStatsBasedOnPrimaryStats()
|
|
{
|
|
//Remove previous
|
|
CritChance.RemoveAllModifiersFromSource(GameConstants.ObjectSources.CunningSource);
|
|
CritDamage.RemoveAllModifiersFromSource(GameConstants.ObjectSources.CunningSource);
|
|
MovementSpeed.RemoveAllModifiersFromSource(GameConstants.ObjectSources.CunningSource);
|
|
|
|
//HealthRegen.RemoveAllModifiersFromSource(GameConstants.ObjectSources.FlowSource);
|
|
MaxMana.RemoveAllModifiersFromSource(GameConstants.ObjectSources.FlowSource);
|
|
ManaRegen.RemoveAllModifiersFromSource(GameConstants.ObjectSources.FlowSource);
|
|
CooldownReduction.RemoveAllModifiersFromSource(GameConstants.ObjectSources.FlowSource);
|
|
AttackSpeed.RemoveAllModifiersFromSource(GameConstants.ObjectSources.FlowSource);
|
|
//ResourceCostReduction.RemoveAllModifiersFromSource(GameConstants.ObjectSources.FlowSource);
|
|
|
|
AreaEffectiveness.RemoveAllModifiersFromSource(GameConstants.ObjectSources.PresenceSource);
|
|
ReputationGainIncrease.RemoveAllModifiersFromSource(GameConstants.ObjectSources.PresenceSource);
|
|
GoldCostReduction.RemoveAllModifiersFromSource(GameConstants.ObjectSources.PresenceSource);
|
|
AuraPower.RemoveAllModifiersFromSource(GameConstants.ObjectSources.PresenceSource);
|
|
|
|
//Add refreshed values
|
|
CritChance.AddModifier(new StatModifier(Cunning.Value * GameConstants.CharacterStatsBalancing.CritChanceIncreasePerCunning, StatModType.Flat, GameConstants.ObjectSources.CunningSource));
|
|
CritDamage.AddModifier(new StatModifier(Cunning.Value * GameConstants.CharacterStatsBalancing.CritDamageIncreasePerCunning, StatModType.Flat, GameConstants.ObjectSources.CunningSource));
|
|
//DodgeChance.AddModifier(new StatModifier(Cunning.Value * GameConstants.CharacterStatInfluence.DodgeChanceIncreasePerCunning, StatModType.Flat, GameConstants.ObjectSources.CunningSource));
|
|
MovementSpeed.AddModifier(new StatModifier(Cunning.Value * GameConstants.CharacterStatsBalancing.MovementSpeedIncreasePerCunning, StatModType.Flat, GameConstants.ObjectSources.CunningSource));
|
|
|
|
//HealthRegen.AddModifier(new StatModifier(Flow.Value * GameConstants.CharacterStatInfluence.HealthRegenIncreasePerFlow, StatModType.Flat, GameConstants.ObjectSources.FlowSource));
|
|
MaxMana.AddModifier(new StatModifier(Flow.Value * GameConstants.CharacterStatsBalancing.MaxManaIncreasePerFlow, StatModType.Flat, GameConstants.ObjectSources.FlowSource));
|
|
ManaRegen.AddModifier(new StatModifier(Flow.Value * GameConstants.CharacterStatsBalancing.ManaRegenIncreasePerFlow, StatModType.Flat, GameConstants.ObjectSources.FlowSource));
|
|
CooldownReduction.AddModifier(new StatModifier(Flow.Value * GameConstants.CharacterStatsBalancing.CooldownReductionIncreasePerFlow, StatModType.Flat, GameConstants.ObjectSources.FlowSource));
|
|
AttackSpeed.AddModifier(new StatModifier(Flow.Value * GameConstants.CharacterStatsBalancing.AttackSpeedIncreasePerFlow, StatModType.Flat, GameConstants.ObjectSources.FlowSource));
|
|
//ResourceCostReduction.AddModifier(new StatModifier(Flow.Value * GameConstants.CharacterStatInfluence.ResourceCostReductionPerFlow, StatModType.Flat, GameConstants.ObjectSources.FlowSource));
|
|
|
|
AreaEffectiveness.AddModifier(new StatModifier(Presence.Value * GameConstants.CharacterStatsBalancing.AreaEffectivenessIncreasePerPresence, StatModType.Flat, GameConstants.ObjectSources.PresenceSource));
|
|
|
|
ReputationGainIncrease.AddModifier(new StatModifier(Presence.Value * GameConstants.CharacterStatsBalancing.ReputationGainIncreasePerPresence, StatModType.Flat, GameConstants.ObjectSources.PresenceSource));
|
|
GoldCostReduction.AddModifier(new StatModifier(Presence.Value * GameConstants.CharacterStatsBalancing.GoldCostReductionPerPresence, StatModType.Flat, GameConstants.ObjectSources.PresenceSource));
|
|
AuraPower.AddModifier(new StatModifier(Presence.Value * GameConstants.CharacterStatsBalancing.AuraPowerPerPresence, StatModType.Flat, GameConstants.ObjectSources.PresenceSource));
|
|
|
|
|
|
|
|
|
|
|
|
Debug.Log(this.gameObject.name + " has relative power level of: " + GetRelativePowerLevel());
|
|
|
|
onAllStatsUpdated.Invoke();
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
}
|
|
} |