Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }