Esempio n. 1
0
 public virtual bool RemoveModifier(CStatModifier mod)
 {
     if (statModifiers.Remove(mod))
     {
         isDirty = true;
         return(true);
     }
     return(false);
 }
Esempio n. 2
0
 protected virtual int CompareModifierOrder(CStatModifier a, CStatModifier b)
 {
     if (a.Order < b.Order)
     {
         return(-1);
     }
     else if (a.Order > b.Order)
     {
         return(1);
     }
     return(0); //if (a.Order == b.Order)
 }
Esempio n. 3
0
    protected virtual float CalculateFinalValue()
    {
        float finalValue    = MyBaseValue;
        float sumPercentAdd = 0;

        statModifiers.Sort(CompareModifierOrder);

        for (int i = 0; i < statModifiers.Count; i++)
        {
            CStatModifier mod = statModifiers[i];
            switch (mod.Type)
            {
            case StatModType.Flat:
                finalValue += mod.Value;
                break;

            case StatModType.Percent:
                switch (mod.Effect)
                {
                case StatModEffect.Add:
                    sumPercentAdd += mod.Value;
                    if (i + 1 >= statModifiers.Count || statModifiers[i + 1].Type != StatModType.Percent || StatModifiers[i + 1].Effect != StatModEffect.Add)
                    {
                        finalValue   *= 1 + sumPercentAdd;
                        sumPercentAdd = 0;
                    }
                    break;

                case StatModEffect.Subtract:
                    break;

                case StatModEffect.Multiply:
                    finalValue *= 1 + mod.Value;
                    break;

                case StatModEffect.Divide:
                    break;
                }

                break;
            }
        }

        // Workaround for float calculation errors, like displaying 12.00001 instead of 12
        return((float)Math.Round(finalValue, 4));
    }
Esempio n. 4
0
 public virtual void AddModifier(CStatModifier mod)
 {
     isDirty = true;
     statModifiers.Add(mod);
 }