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