BWAPI
Undermind/proxy/cpp/ClientModule/terrainanalysis.h
Go to the documentation of this file.
00001 #pragma once
00002 
00003 #include <BWAPI.h>
00004 #include <BWTA.h>
00005 #include <hash_map>
00006 #include "aimodule.pb.h"
00007 
00008 #include <boost/thread/thread.hpp>
00009 #include <boost/thread/condition_variable.hpp>
00010 
00011 
00012 
00013 class TerrainAnalysis {
00014         // terrain stuff:
00015         boost::thread terrainWorker;
00016         bool terrainFinished;
00017         bool terrainSent;
00018         boost::mutex terrainMutex;
00019         boost::condition_variable cond;
00020         stdext::hash_map<BWTA::Region*,int> rids;
00021         stdext::hash_map<BWTA::BaseLocation*,int> bids;
00022         stdext::hash_map<BWTA::Chokepoint*,int> cids;
00023 
00024         static void actuallyRunTerrainAnalysis(TerrainAnalysis* self);
00025 
00026         void setPolygon(const BWTA::Polygon& p, messages::Polygon* mp);
00027 
00028         int idOf(BWTA::Region* r);
00029         int idOf(BWTA::BaseLocation* b);
00030         int idOf(BWTA::Chokepoint*);
00031 
00032         
00033 
00034         TerrainAnalysis(const TerrainAnalysis&) {}
00035 
00036 public:
00037         void waitForTerrain();
00038         TerrainAnalysis(): terrainFinished(false), terrainSent(false) {}
00039         void startTerrainAnalysis();
00040         void setTerrainSent() { terrainSent = true; }
00041         bool isTerrainSent() { return terrainSent; }
00042         
00043         void addTerrainAnalysisData(messages::StaticTerrainInfo* msg);
00044         
00045          bool isTerrainFinished() {
00046                 boost::mutex::scoped_lock lock(terrainMutex);
00047                 return terrainFinished;
00048         }
00049 };
00050 
00051 template<typename P1,typename P2>
00052 void set_position(P1 pos, P2* pos2)
00053 {
00054         pos2->set_x(pos.x());
00055         pos2->set_y(pos.y());
00056 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines