BWAPI
|
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 }