BWAPI
|
00001 #pragma once 00002 #include <Arbitrator.h> 00003 #include <BWAPI.h> 00004 #include <BaseManager.h> 00005 #include <HashMap.h> 00006 00007 class BuildOrderManager; 00008 class WorkerManager : public Arbitrator::Controller<BWAPI::Unit*,double> 00009 { 00010 public: 00011 class WorkerData 00012 { 00013 public: 00014 WorkerData() {resource = NULL; lastFrameSpam = 0;} 00015 BWAPI::Unit* resource; 00016 BWAPI::Unit* newResource; 00017 int lastFrameSpam; 00018 }; 00019 00020 WorkerManager(); 00021 WorkerManager(Arbitrator::Arbitrator<BWAPI::Unit*,double>* arbitrator); 00022 00023 void setBaseManager (BaseManager* baseManager); 00024 void setBuildOrderManager(BuildOrderManager* buildOrderManager); 00025 virtual void onOffer (std::set<BWAPI::Unit*> units); 00026 virtual void onRevoke (BWAPI::Unit* unit, double bid); 00027 virtual void update (); 00028 virtual std::string getName () const; 00029 virtual std::string getShortName () const; 00030 00031 void onRemoveUnit (BWAPI::Unit* unit); 00032 void setWorkersPerGas (int count); 00033 double getMineralRate () const; 00034 double getGasRate () const; 00035 int getOptimalWorkerCount () const; 00036 void enableAutoBuild (); 00037 void disableAutoBuild (); 00038 void setAutoBuildPriority (int priority); 00039 void setDestinationMineral (BWAPI::Unit*); 00040 00041 private: 00042 00043 Arbitrator::Arbitrator<BWAPI::Unit*,double> *arbitrator; 00044 BaseManager *baseManager; 00045 BuildOrderManager *buildOrderManager; 00046 std::map<BWAPI::Unit*,WorkerData> workers; 00047 std::map<BWAPI::Unit*, std::set<BWAPI::Unit*> > currentWorkers; 00048 std::map<BWAPI::Unit*, Base*> resourceBase; 00049 std::map<BWAPI::Unit*, int> desiredWorkerCount; 00050 std::vector<std::pair<BWAPI::Unit*, int> > mineralOrder; 00051 BWAPI::Unit *destinationMineral; 00052 BWAPI::Unit *cleaner; 00053 int mineralOrderIndex; 00054 int lastSCVBalance; 00055 std::set<Base*> basesCache; 00056 int WorkersPerGas; 00057 HashMap hashMap; 00058 00059 void rebalanceWorkers(); 00060 void updateWorkerAssignments(); 00061 00062 double mineralRate; 00063 double gasRate; 00064 bool autoBuild; 00065 int autoBuildPriority; 00066 int optimalWorkerCount; 00067 bool cleaningInProgress; 00068 };