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); }
public virtual ICombatGroup AddAttackerToBattle(IBattleManager battleManager, ITroopObject troopObject) { var offensiveGroup = combatGroupFactory.CreateCityOffensiveCombatGroup(battleManager.BattleId, battleManager.GetNextGroupId(), troopObject); foreach (var attackCombatUnits in troopObject.Stub .SelectMany(formation => formation) .Select(kvp => combatUnitFactory.CreateAttackCombatUnit(battleManager, troopObject, FormationType.Attack, kvp.Key, kvp.Value))) { attackCombatUnits.ToList().ForEach(offensiveGroup.Add); } battleManager.Add(offensiveGroup, BattleManager.BattleSide.Attack, true); return(offensiveGroup); }
public virtual ICombatGroup AddBarbarianTribeUnitsToBattle(IBattleManager battle, IBarbarianTribe barbarianTribe, IEnumerable <Unit> units) { var barbarianCombatGroup = combatGroupFactory.CreateBarbarianTribeCombatGroup(battle.BattleId, battle.GetNextGroupId(), barbarianTribe); foreach (var unit in units) { var combatUnits = combatUnitFactory.CreateBarbarianTribeCombatUnit(battle, barbarianTribe, unit.Type, (byte)Math.Max(1, barbarianTribe.Lvl / 2), unit.Count); foreach (var obj in combatUnits) { barbarianCombatGroup.Add(obj); } } battle.Add(barbarianCombatGroup, BattleManager.BattleSide.Defense, false); return(barbarianCombatGroup); }
public virtual ICombatGroup AddStrongholdUnitsToBattle(IBattleManager battle, IStronghold stronghold, IEnumerable <Unit> units) { var strongholdCombatGroup = combatGroupFactory.CreateStrongholdCombatGroup(battle.BattleId, battle.GetNextGroupId(), stronghold); foreach (var unit in units) { var combatUnits = combatUnitFactory.CreateStrongholdCombatUnit(battle, stronghold, unit.Type, (byte)Math.Max(1, stronghold.Lvl / 2), unit.Count); foreach (var obj in combatUnits) { strongholdCombatGroup.Add(obj); } } battle.Add(strongholdCombatGroup, BattleManager.BattleSide.Defense, false); return(strongholdCombatGroup); }
public virtual ICombatGroup AddStrongholdGateToBattle(IBattleManager battle, IStronghold stronghold) { var strongholdCombatGroup = combatGroupFactory.CreateStrongholdCombatGroup(battle.BattleId, battle.GetNextGroupId(), stronghold); if (stronghold.Gate == 0) { throw new Exception("Dead gate trying to join the battle"); } strongholdCombatGroup.Add(combatUnitFactory.CreateStrongholdGateStructure(battle, stronghold, stronghold.Gate)); battle.Add(strongholdCombatGroup, BattleManager.BattleSide.Defense, false); return(strongholdCombatGroup); }