public void Add(ICombatGroup combatGroup, BattleSide battleSide, bool allowReportAccess) { bool isAttacker = battleSide == BattleSide.Attack; lock (battleLock) { if (GetCombatGroup(combatGroup.Id) != null) { throw new Exception( string.Format("Trying to add a group to battle {0} with id {1} that already exists", BattleId, combatGroup.Id)); } (battleSide == BattleSide.Attack ? Attackers : Defenders).Add(combatGroup); if (isAttacker) { combatGroup.CombatObjectAdded += AttackerGroupOnCombatObjectAdded; combatGroup.CombatObjectRemoved += AttackerGroupOnCombatObjectRemoved; } else { combatGroup.CombatObjectAdded += DefenderGroupOnCombatObjectAdded; combatGroup.CombatObjectRemoved += DefenderGroupOnCombatObjectRemoved; } if (BattleStarted) { BattleReport.WriteReportGroup(combatGroup, isAttacker, ReportState.Entering); if (isAttacker) { ReinforceAttacker(this, combatGroup); } else { ReinforceDefender(this, combatGroup); } } if (allowReportAccess) { BattleReport.AddAccess(combatGroup, battleSide); } if (combatGroup.Tribe != null) { BattleReport.AddTribeToBattle(combatGroup.Tribe, battleSide); } } }