BWAPI
|
00001 #pragma once 00002 #include <algorithm> 00003 #include <BWAPI.h> 00004 #include "Common.h" 00005 #include "InformationManager.h" 00006 #include "WorkerManager.h" 00007 00008 typedef std::set<BWAPI::TilePosition> TilePositionSet; 00009 typedef std::vector<BWAPI::UnitType> UnitTypeVector; 00010 00011 struct MyRectangle { 00012 int x1; 00013 int y1; 00014 int x2; 00015 int y2; 00016 }; 00017 00018 class BuildManager 00019 { 00020 public: 00021 BuildManager(); 00022 ~BuildManager(); 00023 void onFrame(); 00024 BWAPI::TilePosition BuildManager::getBuildLocationNear(BWAPI::TilePosition position, BWAPI::UnitType type); 00025 void constructionPlaced(BWAPI::Unit* build); 00026 void refineryPlaced(BWAPI::Unit* build); 00027 void onBuildingDestroy(BWAPI::Unit* build); 00028 bool alreadyBuilding(BWAPI::UnitType type); 00029 bool alreadyRequested(BWAPI::UnitType type); 00030 bool wallNear(BWAPI::TilePosition destination); 00031 void reserveBaseLocations(); 00032 00033 UnitTypeVector _buildOrder; 00034 UnitTypeVector _toConstruct; 00035 00036 private: 00037 bool executeBuildOrder(BWAPI::UnitType buildType); 00038 BWAPI::TilePosition getGeyserTilePosition(); 00039 bool needSupply(); 00040 bool buildOnProxy(BWAPI::UnitType type); 00041 BWAPI::TilePosition getSeedForTurret(); 00042 MyRectangle getBuildRectangle(BWAPI::TilePosition position, BWAPI::UnitType type); 00043 void mapArea(MyRectangle c, int label, int expand=0); 00044 bool canBuildHere(BWAPI::TilePosition buildPosition, BWAPI::UnitType type); 00045 bool anyMissileTurretsNear(BWAPI::TilePosition buildPosition); 00046 void drawBuildMap(); 00047 void drawBuildOrder(); 00048 bool canBuild(BWAPI::UnitType type); 00049 00050 BWAPI::Unit* _workerBuildingRefinery; 00051 int mapW; 00052 int mapH; 00053 int** buildMap; 00054 00055 };