public BuildingQueueItem(string type, TilePosition tile_position)
 {
     Type = type;
     TilePosition = tile_position;
     ActualPosition = tile_position;
     buildingTask = new TaskCompletionSource<BW.Unit>();
 }
 internal static HandleRef getCPtr(TilePosition obj) {
   return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
 }
 public double getDistance(TilePosition position) {
   double ret = bwapiPINVOKE.TilePosition_getDistance(swigCPtr, TilePosition.getCPtr(position));
   if (bwapiPINVOKE.SWIGPendingException.Pending) throw bwapiPINVOKE.SWIGPendingException.Retrieve();
   return ret;
 }
 public TilePosition opSubtract(TilePosition position) {
   TilePosition ret = new TilePosition(bwapiPINVOKE.TilePosition_opSubtract(swigCPtr, TilePosition.getCPtr(position)), false);
   if (bwapiPINVOKE.SWIGPendingException.Pending) throw bwapiPINVOKE.SWIGPendingException.Retrieve();
   return ret;
 }
 public TilePosition makeValid() {
   TilePosition ret = new TilePosition(bwapiPINVOKE.TilePosition_makeValid(swigCPtr), false);
   return ret;
 }
Beispiel #6
0
 public virtual bool hasCreep(TilePosition position) {
   bool ret = bwapiPINVOKE.Game_hasCreep__SWIG_1(swigCPtr, TilePosition.getCPtr(position));
   if (bwapiPINVOKE.SWIGPendingException.Pending) throw bwapiPINVOKE.SWIGPendingException.Retrieve();
   return ret;
 }
Beispiel #7
0
 public virtual bool placeCOP(TilePosition target) {
   bool ret = bwapiPINVOKE.Unit_placeCOP(swigCPtr, TilePosition.getCPtr(target));
   if (bwapiPINVOKE.SWIGPendingException.Pending) throw bwapiPINVOKE.SWIGPendingException.Retrieve();
   return ret;
 }
Beispiel #8
0
 public virtual TilePosition getInitialTilePosition() {
   TilePosition ret = new TilePosition(bwapiPINVOKE.Unit_getInitialTilePosition(swigCPtr), true);
   return ret;
 }
Beispiel #9
0
        public async Task<bool> buildBuilding(BuildingQueueItem item)
        {
            var probe = getBuildingProbe();
            UnitType building_type = bwapi.getUnitType(item.Type);
            // TilePosition building_position = central_position;
            TilePosition central_position = item.TilePosition;
            TilePosition building_position = item.TilePosition;

            if (probe != null)
            {                
                for (int i = 0; i < 20; i++)
                    for (int j = 0; j < 20; j++)
                    {                        
                        int xoffset = j / 2 * (j % 2 == 0 ? -1 : 1);
                        int yoffset = i / 2 * (i % 2 == 0 ? -1 : 1);                        
                        building_position = new TilePosition(central_position.xConst() + xoffset, central_position.yConst() + yoffset);
                        if (bwapi.Broodwar.canBuildHere(probe.theUnit, building_position, building_type))
                        {
                            item.ActualPosition = building_position;
                            if (!bwapi.Broodwar.isVisible(building_position))
                                await RevealPosition(probe, building_position);
                            return probe.theUnit.build(building_position, building_type);
                        }
                    }
            }
            return false;
        }
Beispiel #10
0
 public async Task RevealPosition(BW.Unit unit, TilePosition position)
 {
     var tcs = new TaskCompletionSource<bool>();
     unit.theUnit.move(new Position(position));
     RevelationTasks.Add(position, tcs);
     await (Task)tcs.Task;
 }        
Beispiel #11
0
 public virtual TilePosition getStartLocation() {
   TilePosition ret = new TilePosition(bwapiPINVOKE.Player_getStartLocation(swigCPtr), true);
   return ret;
 }
Beispiel #12
0
 public virtual bool canBuildHere(Unit builder, TilePosition position, UnitType type) {
   bool ret = bwapiPINVOKE.Game_canBuildHere__SWIG_1(swigCPtr, Unit.getCPtr(builder), TilePosition.getCPtr(position), UnitType.getCPtr(type));
   if (bwapiPINVOKE.SWIGPendingException.Pending) throw bwapiPINVOKE.SWIGPendingException.Retrieve();
   return ret;
 }
Beispiel #13
0
 public virtual bool hasPower(TilePosition position, int tileWidth, int tileHeight) {
   bool ret = bwapiPINVOKE.Game_hasPower__SWIG_1(swigCPtr, TilePosition.getCPtr(position), tileWidth, tileHeight);
   if (bwapiPINVOKE.SWIGPendingException.Pending) throw bwapiPINVOKE.SWIGPendingException.Retrieve();
   return ret;
 }
public bool Equals(TilePosition obj) 
{
    if (obj == null) return false;
    return (obj.swigCPtr.Handle == this.swigCPtr.Handle);
}
 public static UnitCommand build(Unit unit, TilePosition target, UnitType type) {
   UnitCommand ret = new UnitCommand(bwapiPINVOKE.UnitCommand_build(Unit.getCPtr(unit), TilePosition.getCPtr(target), UnitType.getCPtr(type)), true);
   if (bwapiPINVOKE.SWIGPendingException.Pending) throw bwapiPINVOKE.SWIGPendingException.Retrieve();
   return ret;
 }
 public bool opEquals(TilePosition TilePosition) {
   bool ret = bwapiPINVOKE.TilePosition_opEquals(swigCPtr, TilePosition.getCPtr(TilePosition));
   if (bwapiPINVOKE.SWIGPendingException.Pending) throw bwapiPINVOKE.SWIGPendingException.Retrieve();
   return ret;
 }
 public static UnitCommand placeCOP(Unit unit, TilePosition target) {
   UnitCommand ret = new UnitCommand(bwapiPINVOKE.UnitCommand_placeCOP(Unit.getCPtr(unit), TilePosition.getCPtr(target)), true);
   if (bwapiPINVOKE.SWIGPendingException.Pending) throw bwapiPINVOKE.SWIGPendingException.Retrieve();
   return ret;
 }
Beispiel #18
0
 public virtual bool build(TilePosition target, UnitType type) {
   bool ret = bwapiPINVOKE.Unit_build(swigCPtr, TilePosition.getCPtr(target), UnitType.getCPtr(type));
   if (bwapiPINVOKE.SWIGPendingException.Pending) throw bwapiPINVOKE.SWIGPendingException.Retrieve();
   return ret;
 }
 public TilePosition getTargetTilePosition() {
   TilePosition ret = new TilePosition(bwapiPINVOKE.UnitCommand_getTargetTilePosition(swigCPtr), true);
   return ret;
 }
Beispiel #20
0
        public override AIState Run()
        {
            if (State.usedSupply() == 8 && State.freeSupply() <= 1 && !FreeUnits.Any())
            {
                var probe = EcoAI.YieldUnit();
                FreeUnits.Add(probe);
                var choke = getNatChoke();
                var position = choke.getCenter();
                State.pushItem("Protoss Pylon", new TilePosition(position));
                probe.theUnit.move(position);
            }

            if (State.freeSupply() <= ProductionCapacity && State.freeMinerals() >= 100)
            {
                var choke = getNatChoke();
                var position = choke.getCenter();
                if (State.analysis_complete && position != null)
                {
                    bwapi.Broodwar.printf("Chokepoint found");
                    State.pushItem("Protoss Pylon", new TilePosition(position));
                }
                else
                {
                    bwapi.Broodwar.printf("Chokepoint not found");
                    State.pushItem("Protoss Pylon");
                }
            }

            if (State.usedSupply() >= 10)
            {
                requiredBuildings["Protoss Forge"] = 1;
            }

            if (State.getBuildingCount("Protoss Forge") < requiredBuildings["Protoss Forge"])
            {
                TilePosition pylon_position = State.getUnit("Protoss Pylon").theUnit.getTilePosition();
                TilePosition forge_position;
                var pair = getNatChoke().getSides();
                var dx = Math.Abs(pair.first.xConst() - pair.second.xConst());
                var dy = Math.Abs(pair.first.yConst() - pair.second.yConst());
                // horizontal
                if (dx > dy)
                {
                    forge_position = new TilePosition(pylon_position.xConst() - bwapi.getUnitType("Protoss Forge").tileWidth(), pylon_position.yConst());
                    bwapi.Broodwar.printf("Building forge horizontally");
                }
                else
                {
                    forge_position = new TilePosition(pylon_position.xConst(), pylon_position.yConst() - bwapi.getUnitType("Protoss Forge").tileHeight());
                    bwapi.Broodwar.printf("Building forge vertically");
                }
                State.pushItem("Protoss Forge", forge_position);
            }

            if (State.getBuildingCount("Protoss Forge", false, true) > 0)
            {
                requiredBuildings["Protoss Photon Cannon"] = 2;
                
                if (State.getBuildingCount("Protoss Photon Cannon") < requiredBuildings["Protoss Photon Cannon"])
                {
                    TilePosition pylon_position = State.getUnit("Protoss Pylon").theUnit.getTilePosition();
                    TilePosition cannon_position;
                    var pair = getNatChoke().getSides();
                    var dx = Math.Abs(pair.first.xConst() - pair.second.xConst());
                    var dy = Math.Abs(pair.first.yConst() - pair.second.yConst());
                    // vertical
                    var nat_position = getNatural().getTilePosition();
                    if (dx < dy)
                    {
                        int x_offset = nat_position.xConst() > pylon_position.xConst() ? bwapi.getUnitType("Protoss Pylon").tileWidth() : -bwapi.getUnitType("Protoss Photon Cannon").tileWidth();
                        cannon_position = new TilePosition(pylon_position.xConst() + x_offset, pylon_position.yConst());
                        bwapi.Broodwar.printf("Building cannon vertically");
                    }
                    else
                    {
                        int y_offset = nat_position.yConst() > pylon_position.yConst() ? bwapi.getUnitType("Protoss Pylon").tileHeight() : -bwapi.getUnitType("Protoss Photon Cannon").tileHeight();
                        cannon_position = new TilePosition(pylon_position.xConst(), pylon_position.yConst() + y_offset);
                        bwapi.Broodwar.printf("Building cannon horizontally");
                    }

                    State.pushItem("Protoss Photon Cannon", cannon_position);
                }
                if (State.freeMinerals() >= 400)
                {
                    EcoAI.bases = 2;                    
                }
            }
            // should be exactly at intended natural position
            if (State.getBuildingCount("Protoss Nexus") > 1)
            {
                return new MassZealots(State, EcoAI);
            }
            
            base.Run();
            return this;
        }
Beispiel #21
0
 public virtual int getGroundHeight(TilePosition position) {
   int ret = bwapiPINVOKE.Game_getGroundHeight__SWIG_1(swigCPtr, TilePosition.getCPtr(position));
   if (bwapiPINVOKE.SWIGPendingException.Pending) throw bwapiPINVOKE.SWIGPendingException.Retrieve();
   return ret;
 }