BWAPI
|
00001 #pragma once 00002 #include "Utils/CSingleton.h" 00003 #include <BWTA.h> 00004 #include <BWAPI.h> 00005 #include "Utils/TimeManager.h" 00006 #include "Regions/MapManager.h" 00007 #include <map> 00008 #include <set> 00009 #include <list> 00010 #include <vector> 00011 00012 class RegionsUnitData 00013 { 00014 public: 00015 Unit* unit; 00016 UnitType unitType; 00017 Position position; 00018 int lastSeen; 00019 RegionsUnitData(Unit* unit); 00020 bool operator == (const RegionsUnitData& ud) const; 00021 }; 00022 00023 class RegionData 00024 { 00025 public: 00026 // TODO perhaps change vectors by sets (we need a quick find and don't care about the order) 00027 std::map<Player*, std::vector<RegionsUnitData> > buildings; // list of enemy building seen in this region for each player. 00028 std::map<Player*, std::vector<RegionsUnitData> > units; // list of enemy units seen in this region for each player. 00029 int lastSeen; // Last seen frame. 00030 int visited; //Number of the frame when a scout goal to explore was accomplished. 00031 // 0 means never 00032 RegionData(); 00033 bool isOccupied() const; 00034 bool contain(Unit* unit) const; 00035 inline void add(Unit* unit); 00036 }; 00037 00038 00039 class Regions : public CSingleton<Regions> 00040 { 00041 friend class CSingleton<Regions>; 00042 00043 private: 00044 Regions(); 00045 ~Regions(); 00046 MapManager* mapManager; 00047 TimeManager* timeManager; 00048 inline BWTA::Region* findRegion(BWAPI::Position p); 00049 00050 public: 00051 void setDependencies(); 00052 inline void addUnit(BWAPI::Unit* unit); // Add to the corresponding map (building/unit) in regionData. Refresh it if already present. 00053 void removeUnits(); 00054 void addUnits(); 00055 inline void removeUnit( Unit* unit); 00056 virtual void update(); 00057 virtual std::string getName() const; 00058 void onUnitCreate(BWAPI::Unit* unit); 00059 void onUnitDestroy(BWAPI::Unit* unit); 00060 void onUnitShow(BWAPI::Unit* unit); 00061 void onUnitHide(BWAPI::Unit* unit); 00062 void display() const; 00063 bool enemyFound() const; 00064 BWTA::Region* whereIsEnemy(); 00065 00066 #ifdef BW_QT_DEBUG 00067 // Qt interface 00068 virtual QWidget* createWidget(QWidget* parent) const; 00069 virtual void refreshWidget(QWidget* widget) const; 00070 #endif 00071 00072 std::map<BWTA::Region*, RegionData> regionsData; 00073 00074 };