BWAPI
ExampleAIModule/Source/WorkerManager.h
Go to the documentation of this file.
00001 #pragma once
00002 #include <BWAPI.h>
00003 #include <windows.h>
00004 #include "Common.h"
00005 #include "InformationManager.h"
00006 
00007 #define WORKERS_PER_MINERAL 2
00008 
00009 typedef std::map<BWAPI::Unit*, int> ResourceToWorkerMap;
00010 typedef std::map<BWAPI::Unit*, BWAPI::Unit*> WorkerToTargetMap;
00011 typedef std::map<BWAPI::Unit*, std::pair<BWAPI::TilePosition, BWAPI::UnitType> > WorkerToBuildOrderMap;
00012 typedef std::map<BWAPI::Unit*, BWAPI::Unit*> WorkerToTargetMap;
00013 typedef std::map<BWAPI::Unit*, BWTA::BaseLocation*> WorkerToBaseMap;
00014 
00015 class WorkerManager
00016 {
00017 public:
00018         enum State
00019         {
00020                 Gathering_Mineral,
00021                 Gathering_Gas,
00022                 Building,
00023                 Defending,
00024                 Attacking,
00025                 Scouting
00026         };
00027         WorkerManager();
00028         void addUnit(BWAPI::Unit* unit);
00029         void onUnitDestroy(BWAPI::Unit* unit);
00030         void onMineralDestroy(BWAPI::Unit* mineralField);
00031         void onFrame();
00032         bool needWorkers();
00033         BWAPI::Unit* getWorkerForTask(BWAPI::Position toPosition);
00034         int getBuildingWorkers();
00035         void workerBuildingRefinery();
00036         bool isUnderConstruction(BWAPI::UnitType type);
00037         void buildRequest(BWAPI::TilePosition locationToBuild, BWAPI::UnitType buildType);
00038         bool workersDefending();
00039         bool workersDefending(BWAPI::Unit* target);
00040         unsigned int getWorkersMining();
00041         void defenseBase(BWAPI::Unit* unit);
00042         void rebalanceGathering(); // TODO
00043         void reassignRevomedMinerals();
00044 
00045         UnitSet _workerUnits;
00046         WorkerToTargetMap _workersTarget;
00047         ResourceToWorkerMap _mineralsExploitation;
00048         ResourceToWorkerMap _gasExploitation;
00049         std::map<BWAPI::Unit*, WorkerManager::State> _workerState;
00050         WorkerToBuildOrderMap _workerBuildOrder;
00051         WorkerToBaseMap _workersScout;
00052 
00053 private:
00054         BWAPI::Unit* getBestMineral();
00055         BWAPI::Position getPositionToScout(BWAPI::Position seedPos, BWTA::Region* myRegion, BWAPI::Position basePos, bool checkVisible = false);
00056         void tryMiningTrick(BWAPI::Unit* worker);
00057 
00058         int _lastFrameCount;
00059         int _accumluatedMinerals[61];   // We save the "accumulated minerals" for the last 60 seconds (initially, it's all 50s, since you start with 50 minerals)
00060         int _mineralPS, _mineralPM;
00061         double _averageMineralPS, _averageMineralPM;
00062         UnitSet _workerBuildingRefinery;
00063         UnitToTimeMap _workerStartBuilding;
00064 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines