BWAPI
|
00001 #pragma once 00002 #include "Macro/Arbitrator.h" 00003 #include <BWAPI.h> 00004 #include "Macro/BasesManager.h" 00005 00006 class WorkerManager : public Arbitrator::Controller<BWAPI::Unit*,double> 00007 { 00008 public: 00009 class WorkerData 00010 { 00011 public: 00012 WorkerData() {resource = NULL; lastFrameSpam = 0;} 00013 BWAPI::Unit* resource; 00014 BWAPI::Unit* newResource; 00015 int lastFrameSpam; 00016 }; 00017 static WorkerManager* create(); 00018 static void destroy(); 00019 virtual void onOffer(std::set<BWAPI::Unit*> units); 00020 virtual void onRevoke(BWAPI::Unit* unit, double bid); 00021 virtual void update(); 00022 virtual std::string getName() const; 00023 virtual std::string getShortName() const; 00024 00025 void onUnitDestroy(BWAPI::Unit* unit); 00026 void onRemoveUnit(BWAPI::Unit* unit); 00027 void setWorkersPerGas(int count); 00028 double getMineralRate() const; 00029 double getGasRate() const; 00030 int getOptimalWorkerCount() const; 00031 void enableAutoBuild(); 00032 void disableAutoBuild(); 00033 void setAutoBuildPriority(int priority); 00034 private: 00035 WorkerManager(); 00036 ~WorkerManager(); 00037 std::map<BWAPI::Unit*,WorkerData> workers; 00038 std::map<BWAPI::Unit*, std::set<BWAPI::Unit*> > currentWorkers; 00039 std::map<BWAPI::Unit*, Base*> resourceBase; 00040 std::map<BWAPI::Unit*, int> desiredWorkerCount; 00041 std::vector<std::pair<BWAPI::Unit*, int> > mineralOrder; 00042 int mineralOrderIndex; 00043 int lastSCVBalance; 00044 std::set<Base*> basesCache; 00045 int WorkersPerGas; 00046 00047 void rebalanceWorkers(); 00048 void updateWorkerAssignments(); 00049 double mineralRate; 00050 double gasRate; 00051 bool autoBuild; 00052 int autoBuildPriority; 00053 int optimalWorkerCount; 00054 }; 00055 extern WorkerManager* TheWorkerManager;