public void BuildingStage(Runner.NextStageStarter startNextStage)
        {
            // A first building
            Event.Register(EventType.MineralsChanged, args =>
            {
                if (args.Minerals > 150)
                {
                    var baseCenter = BuildingHelper.GetBuildings <BaseCenter>()[0];
                    var position   = BuildingHelper.ClosestEmptySpaceTo(baseCenter);
                    FindWorkerThatGathers().CreateBuilding(BuildingType.NubianArmory, position);

                    // We only need one army production building for now
                    args.ThisEvent.UnregisterEvent();
                }
            });

            // Worker will return to work afterwards
            Event.Register(EventType.BuildingCreated, args =>
            {
                if (
                    args.MyBuilding.GetType().Equals(typeof(NubianArmory))
                    &&
                    args.MyUnit.GetType().Equals(typeof(Worker))
                    )
                {
                    var worker = (Worker)args.MyUnit;
                    worker.SendGather(MaterialHelper.GetNearestMineralsTo(worker));
                    BuildArmy(startNextStage);
                }
                args.ThisEvent.UnregisterEvent();
            });
        }
示例#2
0
        public void EconomyStage(Runner.NextStageStarter startNextStage)
        {
            // Game started, the first worker will get to work
            Worker firstWorker = UnitHelper.GetUnits <Worker>()[0];

            firstWorker.SendGather(MaterialHelper.GetNearestMineralsTo(firstWorker));

            EventForCreatingAnother();
            startNextStage();
        }
 void BuildArmy(Runner.NextStageStarter startNextStage)
 {
     var buildingArmy = Event.Register(EventType.MineralsChanged, args =>
     {
         if (args.Minerals > 100)
         {
             foreach (NubianArmory armory in BuildingHelper.GetBuildings <NubianArmory>())
             {
                 if (armory.CreateUnit(UnitType.DonkeyGun))
                 {
                     if (MyBot.Army++ >= 5)
                     {
                         args.ThisEvent.UnregisterEvent();
                         startNextStage();
                     }
                     break;
                 }
             }
         }
     });
 }
示例#4
0
        public void BattleStage(Runner.NextStageStarter startNextStage)
        {
            // Plan individual unit attacks or a return when meeting too many units
            BuildingUpArmy = Event.Register(EventType.EnemyUnitsOnSight, args =>
            {
                if (args.EnemyUnits.Length > UnitHelper.GetUnits <IUnit>().Length)
                {
                    // Too many enemies, return back
                    foreach (IUnit unit in UnitHelper.GetUnits <IUnit>())
                    {
                        unit.MoveTo(PlaceType.NearBase);
                    }
                }
                else
                {
                    UnitActionQueue queue = new UnitActionQueue();
                    foreach (Unit enemy in args.EnemyUnits)
                    {
                        queue.After(new Attack(enemy));
                    }
                    foreach (IUnit unit in UnitHelper.GetUnits <IUnit>())
                    {
                        unit.ReplaceActionQueue(queue);
                    }
                }
            });

            // Initiate the attack
            GoAttack();
            // When the units get to low health, they will return back to heal
            ScheduleTacticsWhenLowHp();
            // Stores enemies for later possible calculations
            RememberEnemies();
            // Destroys buildings when possible, should be preferable contitioned
            DestroyBuildings();
        }
 public void BuildingStage(Runner.NextStageStarter startNextStage)
 {
     startNextStage();
 }
示例#6
0
 public void BattleStage(Runner.NextStageStarter startNextStage)
 {
     startNextStage();
 }
示例#7
0
 public void EconomyStage(Runner.NextStageStarter startNextStage)
 {
     startNextStage();
 }