BWAPI
|
00001 #pragma once 00002 #include "Macro/Arbitrator.h" 00003 #include <BWAPI.h> 00004 #include "Macro/BuildingPlacer.h" 00005 class ConstructionManager : public Arbitrator::Controller<BWAPI::Unit*,double> 00006 { 00007 public: 00008 class Building 00009 { 00010 public: 00011 BWAPI::TilePosition goalPosition; 00012 BWAPI::TilePosition tilePosition; 00013 BWAPI::Position position; 00014 BWAPI::UnitType type; 00015 BWAPI::Unit* buildingUnit; 00016 BWAPI::Unit* builderUnit; 00017 int lastOrderFrame; 00018 bool started; 00019 }; 00020 ConstructionManager(Arbitrator::Arbitrator<BWAPI::Unit*,double>* arbitrator, BuildingPlacer* placer); 00021 virtual void onOffer(std::set<BWAPI::Unit*> units); 00022 virtual void onRevoke(BWAPI::Unit* unit, double bid); 00023 virtual void update(); 00024 virtual std::string getName() const; 00025 virtual std::string getShortName() const; 00026 00027 void onRemoveUnit(BWAPI::Unit* unit); 00028 bool build(BWAPI::UnitType type, BWAPI::TilePosition goalPosition); 00029 int getPlannedCount(BWAPI::UnitType type) const; 00030 int getStartedCount(BWAPI::UnitType type) const; 00031 00032 private: 00033 Arbitrator::Arbitrator<BWAPI::Unit*,double>* arbitrator; 00034 BuildingPlacer* placer; 00035 std::map<BWAPI::Unit*,Building*> builders; 00036 std::list<Building> incompleteBuildings; 00037 std::map<BWAPI::UnitType,std::set<Building*> > buildingsNeedingBuilders; 00038 std::map<BWAPI::UnitType, int> plannedCount; 00039 std::map<BWAPI::UnitType, int> startedCount; 00040 };