BWAPI
UAlbertaBot_src/Projects/UAlbertaBot/Source/base/BuildingData.h
Go to the documentation of this file.
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 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines