private ICombatGroup GetOrCreateLocalGroup(IBattleManager battleManager, ICity city) { var combatGroup = battleManager.GetCombatGroup(1); if (combatGroup == null) { combatGroup = combatGroupFactory.CreateCityDefensiveCombatGroup(battleManager.BattleId, 1, city.DefaultTroop); battleManager.Add(combatGroup, BattleManager.BattleSide.Defense, false); } return(combatGroup); }
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); }
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 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 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 Simulation(Group attack, Group defense) { Attacker = attack; Defender = defense; CurrentRound = 0; TurnIntervalInSecond = 0; battleManager = Ioc.Kernel.Get <IBattleManagerFactory>() .CreateBattleManager(new BattleLocation(BattleLocationType.City, Defender.City.Id), new BattleOwner(BattleOwnerType.City, Defender.City.Id), Defender.City); battleManager.BattleReport.Battle = battleManager; bv = new BattleViewer(battleManager); // Add local to battle using (Concurrency.Current.Lock(Defender.Local)) { Defender.Local.BeginUpdate(); Defender.Local.AddFormation(FormationType.InBattle); Defender.Local.Template.LoadStats(TroopBattleGroup.Local); var localGroup = new CityDefensiveCombatGroup(battleManager.BattleId, 1, Defender.Local, Ioc.Kernel.Get <IDbManager>()); var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>(); foreach (var kvp in Defender.Local[FormationType.Normal]) { combatUnitFactory.CreateDefenseCombatUnit(battleManager, Defender.Local, FormationType.InBattle, kvp.Key, kvp.Value).ToList().ForEach(localGroup.Add); } foreach (IStructure structure in Defender.City) { localGroup.Add(combatUnitFactory.CreateStructureCombatUnit(battleManager, structure)); } battleManager.Add(localGroup, BattleManager.BattleSide.Defense, false); Ioc.Kernel.Get <CityBattleProcedure>().MoveUnitFormation(Defender.Local, FormationType.Normal, FormationType.InBattle); Defender.Local.EndUpdate(); } // Add attack stub to battle using (Concurrency.Current.Lock(Attacker.AttackStub)) { Attacker.AttackStub.BeginUpdate(); Attacker.AttackStub.Template.LoadStats(TroopBattleGroup.Attack); Attacker.AttackStub.EndUpdate(); var attackGroup = new CityDefensiveCombatGroup(battleManager.BattleId, 2, Attacker.AttackStub, Ioc.Kernel.Get <IDbManager>()); var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>(); foreach (var kvp in Attacker.AttackStub[FormationType.Normal]) { combatUnitFactory.CreateAttackCombatUnit(battleManager, Attacker.TroopObject, FormationType.InBattle, kvp.Key, kvp.Value).ToList().ForEach(attackGroup.Add); } battleManager.Add(attackGroup, BattleManager.BattleSide.Attack, false); } }