BWAPI
SnippyHolloW-BroodwarBotQ-f01ab56/src/Macro/Builder.h
Go to the documentation of this file.
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;
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines