示例#1
0
        void EventForCreatingAnother()
        {
            Event.Register(EventType.MineralsChanged, argsA =>
            {
                if (argsA.Minerals > 50)
                {
                    // After he collected minerals, another worker will be built
                    var baseCenter = BuildingHelper.GetBuildings <BaseCenter>()[0];
                    baseCenter.CreateWorker();

                    // After creating (it means after few seconds), he will need to go gather too
                    Event.Register(EventType.UnitCreated, argsB =>
                    {
                        if (argsB.MyUnit.GetType().Equals(typeof(Worker)))
                        {
                            Worker worker = (Worker)argsB.MyUnit;
                            worker.SendGather(MaterialHelper.GetNearestMineralsTo(worker));
                            argsB.ThisEvent.UnregisterEvent();
                        }
                    });
                }
                argsA.ThisEvent.UnregisterEvent();

                // This event will work only while there are not enough workers.
                // After that, minerals will be left to go over 150.
                if (UnitHelper.GetUnits <Worker>().Length >= 5)
                {
                    argsA.ThisEvent.UnregisterEvent();
                }
            });
        }
        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();
            });
        }
示例#3
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();
        }