Exemple #1
0
        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));
        }
Exemple #2
0
 public virtual bool RemoveModification(StatModification mod)
 {
     isDirty = true;
     if (statModifications.Remove(mod))
     {
         isDirty = true;
         return(true);
     }
     return(false);
 }
Exemple #3
0
 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)
 }
Exemple #4
0
 public virtual void AddModification(StatModification mod)
 {
     isDirty = true;
     statModifications.Add(mod);
     statModifications.Sort(CompareModificationOrder);
 }