BWAPI
Skynet/Skynet/TerrainAnaysis.h
Go to the documentation of this file.
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;
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines