public virtual void AddLocalUnitsToBattle(IBattleManager battleManager, ICity city) { if (city.DefaultTroop[FormationType.Normal].Count == 0) { return; } // Move to in battle formation var unitsToJoinBattle = city.DefaultTroop[FormationType.Normal].ToList(); city.DefaultTroop.BeginUpdate(); city.DefaultTroop.State = TroopState.Battle; city.DefaultTroop.Template.LoadStats(TroopBattleGroup.Local); MoveUnitFormation(city.DefaultTroop, FormationType.Normal, FormationType.InBattle); city.DefaultTroop.EndUpdate(); // Add to local group var combatGroup = GetOrCreateLocalGroup(battleManager, city); foreach (KeyValuePair <ushort, ushort> kvp in unitsToJoinBattle) { var defenseCombatUnits = combatUnitFactory.CreateDefenseCombatUnit(battleManager, city.DefaultTroop, FormationType.InBattle, kvp.Key, kvp.Value); defenseCombatUnits.ToList().ForEach(combatGroup.Add); } }
public virtual uint AddReinforcementToBattle(IBattleManager battleManager, ITroopStub stub, FormationType formationToAddToBattle) { stub.BeginUpdate(); stub.Template.LoadStats(TroopBattleGroup.Defense); stub.EndUpdate(); var defensiveGroup = combatGroupFactory.CreateCityDefensiveCombatGroup(battleManager.BattleId, battleManager.GetNextGroupId(), stub); foreach (var kvp in stub[formationToAddToBattle]) { combatUnitFactory.CreateDefenseCombatUnit(battleManager, stub, formationToAddToBattle, kvp.Key, kvp.Value) .ToList() .ForEach(defensiveGroup.Add); } battleManager.Add(defensiveGroup, BattleManager.BattleSide.Defense, true); return(defensiveGroup.Id); }