Example #1
0
    protected virtual float CalculateFinalValue()
    {
        float finalValue    = baseValue;
        float sumPercentAdd = 0;

        for (int i = 0; i < _attrModifiers.Count; i++)
        {
            AttrModifier mod = _attrModifiers[i];

            if (mod.type == AttrModType.FLAT)
            {
                finalValue += mod.baseValue;
            }
            else if (mod.type == AttrModType.PERCENT_ADD)
            {
                sumPercentAdd += mod.baseValue;

                if (i + 1 >= _attrModifiers.Count || _attrModifiers[i + 1].type != AttrModType.PERCENT_ADD)
                {
                    finalValue   *= 1 + sumPercentAdd;
                    sumPercentAdd = 0;
                }
            }
            else if (mod.type == AttrModType.PERCENT_MULT)
            {
                finalValue *= 1 + mod.baseValue;
            }
        }

        // 12.0001f != 12f
        return((float)Math.Round(finalValue, 4));
    }
Example #2
0
    //protected override float CalculateFinalValue()
    //{
    //    float value = base.CalculateFinalValue();
    //    if (value > baseValue)
    //    {
    //        return baseValue;
    //    }
    //    return value;
    //}

    public override void AddModifier(AttrModifier mod)
    {
        float delta = 0f;

        switch (mod.type)
        {
        case AttrModType.FLAT:
            delta = value + mod.baseValue - baseValue;
            break;

        case AttrModType.PERCENT_MULT:
            delta = value * (1f + mod.baseValue) - baseValue;
            break;

        case AttrModType.PERCENT_ADD:
            delta = value * (1f + mod.baseValue) - baseValue;
            break;
        }

        if (delta <= 0) // If baseValue not reached after modifier addition
        {
            base.AddModifier(mod);
        }
        else if (delta > 0) // If the baseValue will be exceeded, then add difference between current value and basevalue
        {
            base.AddModifier(new AttrModifier(baseValue - value, AttrModType.FLAT));
        }
    }
Example #3
0
 public bool RemoveModifier(AttrModifier mod)
 {
     if (_attrModifiers.Remove(mod))
     {
         isDirty = true;
         return(true);
     }
     return(false);
 }
Example #4
0
 //Comparaison fonction to be used to sort the modifier list, in AddModifier
 private int CompareModOrder(AttrModifier a, AttrModifier b)
 {
     if (a.order < b.order)
     {
         return(-1);
     }
     else if (a.order > b.order)
     {
         return(1);
     }
     return(0); //if both have same order
 }
Example #5
0
File: class.cs Project: shugo/babel
 public AttrDefinition(string name,
                       TypeSpecifier typeSpecifier,
                       AttrModifier modifier,
                       Location location)
     : base(location)
 {
     this.name = name;
     this.typeSpecifier = typeSpecifier;
     this.modifier = modifier;
     fieldBuilder = null;
     reader = null;
     writer = null;
 }
Example #6
0
File: class.cs Project: shugo/babel
 public SharedAttrDefinition(string name,
                             TypeSpecifier typeSpecifier,
                             Expression value,
                             AttrModifier modifier,
                             Location location)
     : base(name, typeSpecifier, modifier, location)
 {
     this.value = value;
 }
Example #7
0
 public virtual void AddModifier(AttrModifier mod)
 {
     isDirty = true;
     _attrModifiers.Add(mod);
     _attrModifiers.Sort(CompareModOrder);
 }