BWAPI
|
00001 #pragma once 00002 #include "Macro/MacroManager/TaskStreamObserver.h" 00003 #include "Macro/MacroManager/TaskStream.h" 00004 #include "Macro/RectangleArray.h" 00005 class PylonBuildingPlacer : public TaskStreamObserver 00006 { 00007 public: 00008 static PylonBuildingPlacer* getInstance(); 00009 PylonBuildingPlacer(); 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 void setPylonDistance(int pylonDistance); 00019 private: 00020 BWAPI::TilePosition getBuildLocationNear(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type, int buildDist) const; 00021 bool canBuildHere(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type) const; 00022 bool canBuildHereWithSpace(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type, int buildDist) const; 00023 bool buildable(BWAPI::Unit* builder, int x, int y) const; 00024 struct data 00025 { 00026 bool isRelocatable; 00027 int buildDistance; 00028 BWAPI::TilePosition reservePosition; 00029 int reserveWidth; 00030 int reserveHeight; 00031 }; 00032 int pylonDistance; 00033 std::map< TaskStream*, data > taskStreams; 00034 00035 };