BWAPI
|
00001 #pragma once 00002 #include "Macro/MacroManager/TaskStreamObserver.h" 00003 #include "Macro/MacroManager/TaskStream.h" 00004 #include "Macro/RectangleArray.h" 00005 class BFSBuildingPlacer : public TaskStreamObserver 00006 { 00007 public: 00008 static BFSBuildingPlacer* getInstance(); 00009 BFSBuildingPlacer(); 00010 virtual void attached(TaskStream* ts); 00011 virtual void detached(TaskStream* ts); 00012 virtual void newStatus(TaskStream* ts); 00013 virtual void completedTask(TaskStream* ts, const Task &t); 00014 virtual void update(TaskStream* ts); 00015 void setTilePosition(TaskStream* ts, BWAPI::TilePosition p); 00016 void setRelocatable(TaskStream* ts, bool isRelocatable); 00017 void setBuildDistance(TaskStream* ts, int distance); 00018 private: 00019 BWAPI::TilePosition getBuildLocationNear(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type, int buildDist) const; 00020 bool canBuildHere(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type) const; 00021 bool canBuildHereWithSpace(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type, int buildDist) const; 00022 bool buildable(BWAPI::Unit* builder, int x, int y) const; 00023 struct data 00024 { 00025 bool isRelocatable; 00026 int buildDistance; 00027 BWAPI::TilePosition reservePosition; 00028 int reserveWidth; 00029 int reserveHeight; 00030 }; 00031 std::map< TaskStream*, data > taskStreams; 00032 00033 };