This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public bool RemoveAllModifiersFromSource(object source) | |
{ | |
bool didRemove = false; | |
for (int i = statModifiers.Count - 1; i >= 0; i--) | |
{ | |
if (statModifiers[i].Source == source) | |
{ | |
isDirty = true; | |
didRemove = true; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Hypothetical item class | |
public class Item | |
{ | |
public void Equip(Character c) | |
{ | |
// We need to store our modifiers in variables before adding them to the stat. | |
mod1 = new StatModifier(10, StatModType.Flat); | |
mod2 = new StatModifier(0.1, StatModType.Percent); | |
c.Strength.AddModifier(mod1); | |
c.Strength.AddModifier(mod2); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public readonly float Value; | |
public readonly StatModType Type; | |
public readonly int Order; | |
public readonly object Source; // Added this variable | |
// "Main" constructor. Requires all variables. | |
public StatModifier(float value, StatModType type, int order, object source) // Added "source" input parameter | |
{ | |
Value = value; | |
Type = type; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private float CalculateFinalValue() | |
{ | |
float finalValue = BaseValue; | |
float sumPercentAdd = 0; // This will hold the sum of our "PercentAdd" modifiers | |
for (int i = 0; i < statModifiers.Count; i++) | |
{ | |
StatModifier mod = statModifiers[i]; | |
if (mod.Type == StatModType.Flat) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public enum StatModType | |
{ | |
Flat, | |
PercentAdd, // Add this new type. | |
PercentMult, // Change our old Percent type to this. | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Change the AddModifiers method to this | |
public void AddModifier(StatModifier mod) | |
{ | |
isDirty = true; | |
statModifiers.Add(mod); | |
statModifiers.Sort(CompareModifierOrder); | |
} | |
// Add this method to the CharacterStat class | |
private int CompareModifierOrder(StatModifier a, StatModifier b) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Add this variable to the top of the class | |
public readonly int Order; | |
// Change the existing constructor to look like this | |
public StatModifier(float value, StatModType type, int order) | |
{ | |
Value = value; | |
Type = type; | |
Order = order; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private float CalculateFinalValue() | |
{ | |
float finalValue = BaseValue; | |
for (int i = 0; i < statModifiers.Count; i++) | |
{ | |
StatModifier mod = statModifiers[i]; | |
if (mod.Type == StatModType.Flat) | |
{ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class StatModifier | |
{ | |
public readonly float Value; | |
public readonly StatModType Type; | |
public StatModifier(float value, StatModType type) | |
{ | |
Value = value; | |
Type = type; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public enum StatModType | |
{ | |
Flat, | |
Percent, | |
} |