private void Construct(ConstructBuildingStep constructStep) { var builder = GetFreeDrone(); var buildSite = FindBuildSite(constructStep); Construct(builder, buildSite, constructStep); }
private void Construct(Unit builder, TilePosition buildSite, ConstructBuildingStep constructStep) { if (!Game.IsExplored(buildSite)) { builder.Move(buildSite.ToPixelTile(), false); return; } builder.Build(constructStep.Target, buildSite); _constructionStarted.Where(x => x == constructStep.Target).Take(1).Subscribe(x => constructStep.Complete()); }
private TilePosition FindBuildSite(ConstructBuildingStep constructStep) { var building = constructStep.Target; var basePosition = Game.Self.StartLocation; var buildLocation = Game.GetBuildLocation(UnitTypes.All[building], basePosition, 32, false); if (building == UnitType.Zerg_Creep_Colony) { buildLocation = CreepColonyNearChoke() ?? buildLocation; } if (buildLocation == null) { throw new Exception("Could not find suitable build site"); } return(buildLocation); }