private void UpdateImbalance(ArmyComposition resultArmyComposition) { if (imbalance < 0) { imbalance += resultArmyComposition.TotalUnitQuantity(); } else { imbalance -= resultArmyComposition.TotalUnitQuantity(); } }
/// <summary> /// Merges two army compositions. /// The old experience is uniformly distributed among the total number of units in each army. /// </summary> public static ArmyComposition Merge(ArmyComposition first, ArmyComposition second) { var newExperience = (first.TotalUnitQuantity() * first.Experience + second.TotalUnitQuantity() * second.Experience) / (first.TotalUnitQuantity() + second.TotalUnitQuantity()); return(new ArmyComposition(first.Spearmen + second.Spearmen, first.Archers + second.Archers, first.Cavalrymen + second.Cavalrymen, newExperience)); }