Created
December 3, 2017 20:04
-
-
Save Kryzarel/8140666fc81e979ebe6b98caec117c49 to your computer and use it in GitHub Desktop.
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) | |
{ | |
finalValue += mod.Value; | |
} | |
else if (mod.Type == StatModType.PercentAdd) // When we encounter a "PercentAdd" modifier | |
{ | |
sumPercentAdd += mod.Value; // Start adding together all modifiers of this type | |
// If we're at the end of the list OR the next modifer isn't of this type | |
if (i + 1 >= statModifiers.Count || statModifiers[i + 1].Type != StatModType.PercentAdd) | |
{ | |
finalValue *= 1 + sumPercentAdd; // Multiply the sum with the "finalValue", like we do for "PercentMult" modifiers | |
sumPercentAdd = 0; // Reset the sum back to 0 | |
} | |
} | |
else if (mod.Type == StatModType.PercentMult) // Percent renamed to PercentMult | |
{ | |
finalValue *= 1 + mod.Value; | |
} | |
} | |
return (float)Math.Round(finalValue, 4); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment