BWAPI
|
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 };