protected float CalculateFinalStatValue() { float finalValue = BaseValue; float sumPercentAdd = 0; for (int i = 0; i < statModifiers.Count; i++) { scrUnitStatModifiersTutorial mod = statModifiers[i]; if (mod.ModifierType == StatModType.Flat) { finalValue += mod.ModifierValue; } else if (mod.ModifierType == StatModType.PercentAdd) { sumPercentAdd += mod.ModifierValue; if (i + 1 > statModifiers.Count || statModifiers[i + 1].ModifierType != StatModType.PercentAdd) { finalValue *= sumPercentAdd; sumPercentAdd = 0; } } else if (mod.ModifierType == StatModType.PercentMult) { finalValue *= 1 + mod.ModifierValue; } } return((float)Math.Round(finalValue, 4)); }
public bool RemoveModifier(scrUnitStatModifiersTutorial modifier) { if (statModifiers.Remove(modifier)) { isDirty = true; return(true); } return(false); }
protected int CompareModifierOrder(scrUnitStatModifiersTutorial a, scrUnitStatModifiersTutorial b) { if (a.ModifierOrder < b.ModifierOrder) { return(-1); } else if (a.ModifierOrder > b.ModifierOrder) { return(1); } return(0); //if (a.ModifierOrder == b.ModifierOrder) }
public void AddModifier(scrUnitStatModifiersTutorial modifier) { isDirty = true; statModifiers.Add(modifier); statModifiers.Sort(CompareModifierOrder); }