/// <summary> /// Adds the FieldMovementRateModifier to the MovementRateModifiers List. Replaces another modifier with the same ID. Sorts the new Entry: First alls additive, then all multiplicative modifiers. Calculates the new Expenditures value for the Field. /// </summary> /// <param name="expendituresModifier">The modifier to add to the list.</param> private void AddExpendituresModifier(Modifier.FieldExpendituresModifier expendituresModifier) { bool ModIsInserted = false; double expenditures = 1; for (int i = 0; i < ExpendituresModifiers.Count; i++) { //Is there a modifier with the same ID? Replace it. if (expendituresModifier.ModifierID == ExpendituresModifiers[i].ModifierID) { ExpendituresModifiers.RemoveAt(i); ExpendituresModifiers.Insert(i, expendituresModifier); ModIsInserted = true; } //Insert the additive modifier at the end of all the additive modifiers, if there was no duplicate. if (!ModIsInserted && expendituresModifier.Additive && !ExpendituresModifiers[i].Additive) { ExpendituresModifiers.Insert(i, expendituresModifier); ModIsInserted = true; } //Insert the modifier, when the end of the list is reached and it wasn't inserted already. if (!ModIsInserted && i == ExpendituresModifiers.Count - 1) { ExpendituresModifiers.Add(expendituresModifier); ModIsInserted = true; } //If the modifier at position i is Additive, add it. If it is a multiplicator, multiply it. if (ExpendituresModifiers[i].Additive) { expenditures += ExpendituresModifiers[i].Value; } else { expenditures *= ExpendituresModifiers[i].Value; } } Expenditures = expenditures; }
/// <summary> /// Adds a FieldExpendituresModifier to the ExpendituresModifiers List by ID. /// </summary> /// <param name="modifierID"></param> /// <param name="value"></param> public void AddExpendituresModifier(int modifierID, double value = 1) { Modifier.FieldExpendituresModifier expendituresModifier = new Modifier.FieldExpendituresModifier(this, modifierID, value); AddExpendituresModifier(expendituresModifier); }