BWAPI
|
00001 #pragma once 00002 00003 #include "Interface.h" 00004 00005 #include "Singleton.h" 00006 #include "RectangleArray.h" 00007 #include "Chokepoint.h" 00008 #include "Region.h" 00009 00010 class TerrainAnaysisClass 00011 { 00012 public: 00013 TerrainAnaysisClass(); 00014 00015 void analyseBasesAndTerrain(); 00016 void finaliseConnectivity(); 00017 00018 const std::set<Region> &getRegions() const { return mRegions; } 00019 const std::set<Chokepoint> &getChokepoints() const { return mChokepoints; } 00020 00021 const Region &getRegion(TilePosition tile) const { return mTileToRegion[tile.x()*4][tile.y()*4]; } 00022 const Region &getRegion(Position pos) const { return mTileToRegion[pos.x()/8][pos.y()/8]; } 00023 const Region &getRegion(WalkPosition tile) const { return mTileToRegion[tile.x][tile.y]; } 00024 const Region &getRegion(int x, int y) const { return mTileToRegion[x][y]; } 00025 00026 int getWalkClearance(WalkPosition currentTile) { return mTileClearance[currentTile.x][currentTile.y]; } 00027 int getWalkClearance(int x, int y) { return mTileClearance[x][y]; } 00028 00029 int getWalkConnectivity(WalkPosition currentTile) { return mTileConnectivity[currentTile.x][currentTile.y]; } 00030 int getWalkConnectivity(int x, int y) { return mTileConnectivity[x][y]; } 00031 00032 private: 00033 std::set<Chokepoint> mChokepoints; 00034 std::set<Region> mRegions; 00035 RectangleArray<Region> mTileToRegion; 00036 00037 RectangleArray<int> mTileConnectivity; 00038 std::set<int> mSmallObstacles; 00039 00040 RectangleArray<int> mTileClearance; 00041 RectangleArray<WalkPosition> mTileClosestObstacle; 00042 00043 void calculateConnectivity(); 00044 void calculateWalkTileClearance(); 00045 void createRegions(); 00046 void createBases(); 00047 00048 std::pair<WalkPosition, WalkPosition> findChokePoint(WalkPosition center); 00049 00050 void removeChokepoint(Chokepoint chokeToRemove); 00051 }; 00052 00053 typedef Singleton<TerrainAnaysisClass> TerrainAnaysis;