Pedro Gomes 4c3edff503 Crafting system working (WIP)
- Crafting UI fully functional
- Crafting Stat stones and modular equippable items fully functional
Notes:
- Urgent need for exclusive(auto sorted) inventory for stones only
- Something to do with the "trash" modular items instead of just selling
- Add new uses for gold besides equipment, preset items will probably be worthless with modular crafting
2025-01-06 19:52:31 +00:00

126 lines
7.7 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));
}
}
}