BWAPI
UAlbertaBot_src/Projects/UAlbertaBot/Source/base/BuildingManager.h
Go to the documentation of this file.
00001 #pragma once
00002 
00003 #include <Common.h>
00004 #include "WorkerManager.h"
00005 #include "BuildingPlacer.h"
00006 #include "BuildingData.h"
00007 #include "UnitInfoState.h"
00008 #include "MapTools.h"
00009 
00010 class BuildingManager {
00011 
00012         BuildingManager();
00013 
00014         ConstructionData                        buildingData;
00015 
00016         static BuildingManager *        instance;
00017 
00018         bool                                            debugMode;
00019         int                                                     totalBuildTasks;
00020 
00021         int                                                     reservedMinerals;                               // minerals reserved for planned buildings
00022         int                                                     reservedGas;                                    // gas reserved for planned buildings
00023         int                                                     buildingSpace;                                  // how much space we want between buildings
00024 
00025         std::vector<BWAPI::Unit *>      builders;                                               // workers which have been assigned to buildings
00026         std::vector<Building>           buildingsNeedingBuilders;               // buildings which do not yet have builders assigned
00027         std::vector<Building>           buildingsAssigned;                              // buildings which have workers but not yet under construction
00028         std::vector<Building>           buildingsUnderConstruction;             // buildings which are under construction
00029         std::vector<BWAPI::Unit *>      buildingUnitsConstructing;              // units which have been recently detected as started construction
00030 
00031         // functions
00032         bool                                            isEvolvedBuilding(BWAPI::UnitType type);
00033         bool                                            isBuildingPositionExplored(const Building & b) const;
00034 
00035         // the update() functions
00036         void                                            validateWorkersAndBuildings();          // STEP 1
00037         void                                            assignWorkersToUnassignedBuildings();   // STEP 2
00038         void                                            constructAssignedBuildings();                   // STEP 3
00039         void                                            checkForStartedConstruction();                  // STEP 4
00040         void                                            checkForDeadTerranBuilders();                   // STEP 5
00041         void                                            checkForCompletedBuildings();                   // STEP 6
00042 
00043         // functions for performing tedious vector tasks
00044         void                                            removeBuildingFromVector(BWAPI::Unit * buildingUnit, std::vector<Building> & vec);
00045         void                                            removeBuildingFromVector(Building & b, std::vector<Building> & vec);
00046 
00047         void                                            drawBuildingInformation(int x, int y);
00048         char                                            getBuildingWorkerCode(const Building & b) const;
00049 
00050 public:
00051 
00052         void                                            update();
00053         void                                            onUnitMorph(BWAPI::Unit * unit);
00054         void                                            onUnitDestroy(BWAPI::Unit * unit);
00055         void                                            addBuildingTask(BWAPI::UnitType type, BWAPI::TilePosition desiredLocation);
00056         BWAPI::TilePosition                     getBuildingLocation(const Building & b);
00057 
00058         int                                                     getReservedMinerals();
00059         int                                                     getReservedGas();
00060 
00061         static BuildingManager *        getInstance();
00062 
00063         void                                            printBuildingNumbers();
00064 
00065         bool                                            isBeingBuilt(BWAPI::UnitType type);
00066 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines