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(); }); }
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); }
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); }