|
BWAPI
|
00001 #pragma once 00002 #include <BWAPI.h> 00003 #include "../../../PerceptualState/Locations/Static/StaticLocation.h" 00004 #include "../../../PerceptualState/Locations/Static/BaseLocation.h" 00005 00006 class NewBuildingPlacer 00007 { 00008 public: 00009 static void onStart() 00010 { 00011 s_newBuildingPlacer = new NewBuildingPlacer(); 00012 } 00013 static void onEnd() 00014 { 00015 delete s_newBuildingPlacer; 00016 } 00017 static NewBuildingPlacer* getInstance() 00018 { 00019 return s_newBuildingPlacer; 00020 } 00021 void setBuildingDistance(int dist); 00022 00023 bool needsAdditionalPylons(); 00024 void setPylonFalse(); 00025 00026 //Should need only base in the future 00027 BWAPI::TilePosition getBuildingLocation(BWAPI::Unit* builder, BWAPI::UnitType toBuild,StaticLocation* location); 00028 bool reservePosition(BWAPI::TilePosition tp,BWAPI::UnitType toBuild); 00029 bool unreservePosition(BWAPI::TilePosition tp,BWAPI::UnitType toBuild); 00030 void addNewNexus(BWAPI::Unit* nexus); 00031 00032 //Should not be here 00033 bool isUsed(BWAPI::Unit*); 00034 void useWorker(BWAPI::Unit*); 00035 void releaseWorker(BWAPI::Unit*); 00036 private: 00037 NewBuildingPlacer(); 00038 ~NewBuildingPlacer(); 00039 bool overReservedPosition(BWAPI::TilePosition tp,BWAPI::UnitType toBuild); 00040 bool canBuildHere(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type); 00041 bool canBuildHereWithSpace(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type, int buildDist); 00042 bool buildable(BWAPI::Unit* builder, int x, int y); 00043 bool tileHasBuilding(BWAPI::TilePosition position); 00044 bool tileIsWalkable(BWAPI::TilePosition position); 00045 bool canWalkAround(BWAPI::TilePosition position, BWAPI::UnitType type); 00046 BWAPI::TilePosition getBuildLocationNear(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type, int buildDist, int maxDistance); 00047 00048 static NewBuildingPlacer* s_newBuildingPlacer; 00049 00050 int m_distance; 00051 bool** reservedEmplacements; 00052 std::list<BWAPI::Unit*> usedWorker; 00053 bool needPylon; 00054 std::set<BWAPI::Unit*> nexusWithoutPylon; 00055 };
1.7.6.1