BWAPI
|
00001 #ifndef __COVERMAP_H__ 00002 #define __COVERMAP_H__ 00003 00004 #include "UnitAgent.h" 00005 #include "MapDataReader.h" 00006 00007 using namespace BWAPI; 00008 using namespace BWTA; 00009 using namespace std; 00010 00011 struct Corners { 00012 int x1; 00013 int y1; 00014 int x2; 00015 int y2; 00016 }; 00017 00031 class CoverMap { 00032 00033 private: 00034 CoverMap(); 00035 static CoverMap* instance; 00036 static bool instanceFlag; 00037 00038 int range; 00039 int w; 00040 int h; 00041 int** cover_map; 00042 00043 Corners getCorners(Unit* unit); 00044 Corners getCorners(UnitType type, TilePosition center); 00045 00046 void fill(Corners c); 00047 void clear(Corners c); 00048 00049 Unit* findWorker(); 00050 00051 bool suitableForDetector(TilePosition pos); 00052 bool isOccupied(Region* region); 00053 00054 MapDataReader mapData; 00055 00056 bool baseUnderConstruction(BaseAgent* base); 00057 TilePosition findBuildSpot(UnitType toBuild, TilePosition start); 00058 00059 public: 00061 ~CoverMap(); 00062 00064 static CoverMap* getInstance(); 00065 00067 void addConstructedBuilding(Unit* unit); 00068 00069 void fillTemp(UnitType toBuild, TilePosition buildSpot); 00070 void clearTemp(UnitType toBuild, TilePosition buildSpot); 00071 00073 void buildingDestroyed(Unit* unit); 00074 00077 bool canBuild(UnitType toBuild, TilePosition buildSpot); 00078 00080 bool positionFree(TilePosition pos); 00081 00084 void blockPosition(TilePosition buildSpot); 00085 00088 TilePosition findBuildSpot(UnitType toBuild); 00089 00092 TilePosition findRefineryBuildSpot(UnitType toBuild, TilePosition start); 00093 00096 TilePosition findClosestGasWithoutRefinery(UnitType toBuild, TilePosition start); 00097 00099 TilePosition searchRefinerySpot(); 00100 00102 TilePosition findExpansionSite(); 00103 00105 void debug(); 00106 00108 static const int BUILDABLE = 1; 00110 static const int BLOCKED = 0; 00112 static const int TEMPBLOCKED = 4; 00114 static const int MINERAL = 2; 00116 static const int GAS = 3; 00117 }; 00118 00119 #endif