|
BWAPI
|
00001 #pragma once 00002 00003 #include "Common.h" 00004 00005 class Building { 00006 00007 public: 00008 00009 BWAPI::TilePosition desiredPosition; 00010 BWAPI::TilePosition finalPosition; 00011 BWAPI::Position position; 00012 BWAPI::UnitType type; 00013 BWAPI::Unit * buildingUnit; 00014 BWAPI::Unit * builderUnit; 00015 int lastOrderFrame; 00016 bool buildCommandGiven; 00017 bool underConstruction; 00018 00019 Building() 00020 : desiredPosition(0,0), finalPosition(BWAPI::TilePositions::None), position(0,0), 00021 type(BWAPI::UnitTypes::Unknown), buildingUnit(NULL), 00022 builderUnit(NULL), lastOrderFrame(0), buildCommandGiven(false), underConstruction(false) {} 00023 00024 // constructor we use most often 00025 Building(BWAPI::UnitType t, BWAPI::TilePosition desired) 00026 : desiredPosition(desired), finalPosition(0,0), position(0,0), 00027 type(t), buildingUnit(NULL), builderUnit(NULL), 00028 lastOrderFrame(0), buildCommandGiven(false), underConstruction(false) {} 00029 00030 // equals operator 00031 bool operator==(const Building & b) { 00032 // buildings are equal if their worker unit or building unit are equal 00033 return (b.buildingUnit == buildingUnit) || (b.builderUnit == builderUnit); 00034 } 00035 }; 00036 00037 class ConstructionData { 00038 00039 public: 00040 00041 typedef enum BuildingState_t {Unassigned = 0, Assigned = 1, UnderConstruction = 2, NumBuildingStates = 3} BuildingState; 00042 00043 private: 00044 00045 int reservedMinerals; // minerals reserved for planned buildings 00046 int reservedGas; // gas reserved for planned buildings 00047 int buildingSpace; // how much space we want between buildings 00048 00049 std::vector< size_t > buildingIndex; 00050 std::vector< std::vector<Building> > buildings; // buildings which do not yet have builders assigned 00051 00052 std::set<BWAPI::Unit *> buildingUnitsConstructing; // units which have been recently detected as started construction 00053 00054 public: 00055 00056 ConstructionData(); 00057 00058 Building & getNextBuilding(BuildingState bs); 00059 bool hasNextBuilding(BuildingState bs); 00060 void begin(BuildingState bs); 00061 void addBuilding(BuildingState bs, Building & b); 00062 void removeCurrentBuilding(BuildingState bs); 00063 void removeBuilding(BuildingState bs, Building & b); 00064 00065 int getNumBuildings(BuildingState bs); 00066 00067 bool isBeingBuilt(BWAPI::UnitType type); 00068 };
1.7.6.1