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();
            });
        }
Exemple #2
0
        private static bool CreateBaseIfNone(Worker worker)
        {
            // If all bases were destroyed, try to make a new one
            var bases = BuildingHelper.GetMyBuildings <BaseCenter>();

            if (bases.Length == 0)
            {
                worker.CreateBuilding(
                    BuildingType.BaseCenter,
                    BuildingHelper.ClosestEmptySpaceTo(
                        BuildingHelper.GetMyBuildings <IBuilding>()[0],
                        BuildingType.BaseCenter));
                return(true);
            }
            if (!bases[0].Finished)
            {
                worker.FinishBuiding(bases[0]);
                return(true);
            }
            return(false);
        }
Exemple #3
0
        private bool BuildNubianArmory(Arguments args)
        {
            if (args.Minerals < 100)
            {
                return(false);
            }
            var baseCenter = BuildingHelper.GetMyBuildings <BaseCenter>()[0];
            var position   = BuildingHelper.ClosestEmptySpaceTo(baseCenter, BuildingType.NubianArmory);

            if (position == null)
            {
                return(false);
            }
            IBuilding building = FindWorkerThatGathers().CreateBuilding(BuildingType.NubianArmory, position);

            FindWorkerThatGathers().FinishBuiding(building);

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