BWAPI
|
00001 #pragma once 00002 #include "Macro/Arbitrator.h" 00003 #include "Macro/SimCityBuildingPlacer.h" 00004 #include <BWAPI.h> 00005 #include <list> 00006 #include <boost/shared_ptr.hpp> 00007 00008 class Task; 00009 typedef boost::shared_ptr<Task> pTask; 00010 00011 class Task : public Arbitrator::Controller<BWAPI::Unit*, double> 00012 { 00013 BWAPI::Unit* worker; 00014 BWAPI::TilePosition tilePosition; 00015 BWAPI::UnitType type; 00016 int lastOrder; 00017 bool finished; 00018 int tries; 00019 bool initialized; 00020 public: 00021 static SimCityBuildingPlacer* buildingPlacer; 00022 static int framesToCompleteRequirements(BWAPI::UnitType type); 00023 Task(BWAPI::Unit* w, BWAPI::TilePosition tp=BWAPI::TilePositions::None, BWAPI::UnitType ut=BWAPI::UnitTypes::None, int lo=0); 00024 void init(); 00025 ~Task(); 00026 virtual void onOffer(std::set<BWAPI::Unit*> units); 00027 virtual void onRevoke(BWAPI::Unit* unit, double bid); 00028 inline void askWorker(); 00029 inline void buildIt(); 00030 virtual std::string getName() const; 00031 virtual std::string getShortName() const; 00032 void check(); 00033 virtual void update(); 00034 const BWAPI::UnitType& getType() const; 00035 int getLastOrder() const; 00036 bool isFinished(); 00037 }; 00038 00039 class Builder 00040 { 00041 public: 00042 static Builder* create(); 00043 static void destroy(); 00044 void addTask(const BWAPI::UnitType& t, const BWAPI::TilePosition& seedPosition, bool quick, int lastOrder=0); 00045 void build(const BWAPI::UnitType& t, const BWAPI::TilePosition& seedPosition=BWAPI::TilePositions::None, bool quick=false); 00046 void buildOrder(const BWAPI::UnitType& t, int supplyAsTime, const BWAPI::TilePosition& seedPosition=BWAPI::TilePositions::None); 00047 void buildCannonsMinerals(BWTA::BaseLocation* b); 00048 int numberInFutureTasks(const BWAPI::UnitType& t); 00049 int numberInConstruction(const BWAPI::UnitType& t); 00050 int willBuild(const BWAPI::UnitType& t); // Dumb helper functions that should be replaced by a better datastructure 00051 const std::list<BWAPI::Unit*>& getInConstruction(); 00052 int additionalSupplyNextFrames(int frames=30*24); // UnitTypes::Protoss_Pylon.buildTime() 00053 void update(); 00054 const BWAPI::UnitType& nextBuildingType(); 00055 void onUnitCreate(BWAPI::Unit* unit); 00056 void onUnitDestroy(BWAPI::Unit* unit); 00057 private: 00058 SimCityBuildingPlacer buildingPlacer; 00059 std::list<pTask> tasks; 00060 std::multimap<int, pTask> boTasks; 00061 std::list<BWAPI::Unit*> inConstruction; 00062 Builder(); 00063 ~Builder(); 00064 }; 00065 extern Builder* TheBuilder;