protected virtual float CalculateFinalValue() { float finalValue = BaseValue; float sumPercentAdd = 0; for (int i = 0; i < statModifications.Count; i++) { StatModification mod = statModifications[i]; if (mod.Type == StatModificationType.Flat) { finalValue += mod.Value; } else if (mod.Type == StatModificationType.PercentAdd) { sumPercentAdd += mod.Value; if (i + 1 >= statModifications.Count || statModifications[i + 1].Type != StatModificationType.PercentAdd) { finalValue *= 1 + sumPercentAdd; sumPercentAdd = 0; } } else if (mod.Type == StatModificationType.PercentMult) { finalValue *= 1 + mod.Value; } } return((float)Math.Round(finalValue, 4)); }
public virtual bool RemoveModification(StatModification mod) { isDirty = true; if (statModifications.Remove(mod)) { isDirty = true; return(true); } return(false); }
protected virtual int CompareModificationOrder(StatModification a, StatModification b) { if (a.Order < b.Order) { return(-1); } else if (a.Order > b.Order) { return(1); } return(0); //if (a.Order == b.Order) }
public virtual void AddModification(StatModification mod) { isDirty = true; statModifications.Add(mod); statModifications.Sort(CompareModificationOrder); }