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(); }); }
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; } } } }); }
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(); }
public void BattleStage(Runner.NextStageStarter startNextStage) { startNextStage(); }
public void EconomyStage(Runner.NextStageStarter startNextStage) { startNextStage(); }