BWAPI
SnippyHolloW-BroodwarBotQ-f01ab56/src/Macro/Producer.h
Go to the documentation of this file.
00001 #pragma once
00002 #include "Macro/Arbitrator.h"
00003 #include <BWAPI.h>
00004 #include <set>
00005 #include <map>
00006 
00007 struct ProducingUnit
00008 {
00009         int lastAction;
00010         BWAPI::Unit* unit;
00011         ProducingUnit(BWAPI::Unit* u);
00012         explicit ProducingUnit(const ProducingUnit& pu);
00013         BWAPI::Unit* operator->() const;
00014         bool train(BWAPI::UnitType t);
00015 };
00016 
00017 class Producer : public Arbitrator::Controller<BWAPI::Unit*, double>
00018 {
00019 public:
00020         static Producer* create();
00021         static void destroy();
00022         inline bool checkCanProduce(BWAPI::UnitType t);
00023         inline bool checkCanTech(BWAPI::TechType t);
00024         inline bool checkCanUpgrade(BWAPI::UpgradeType t);
00025         inline bool checkHaveTech(BWAPI::UnitType ut);
00026         int willProduce(BWAPI::UnitType t);
00027         void produce(int number, BWAPI::UnitType t, int priority=20, int increment=1);
00028     void produceAlways(int number, BWAPI::UnitType t, int increment=1);
00029         void produceAdditional(int number, BWAPI::UnitType t, int priority=20, int increment=1);
00030         void researchTech(BWAPI::TechType t);
00031         void researchUpgrade(BWAPI::UpgradeType t);
00032         void update();
00033 
00034         void onUnitCreate(BWAPI::Unit* unit);
00035         void onUnitDestroy(BWAPI::Unit* unit);
00036 
00037         virtual void onOffer(std::set<BWAPI::Unit*> units);
00038         virtual void onRevoke(BWAPI::Unit* unit, double bid);
00039         virtual std::string getName() const;
00040 private:
00041         std::multimap<BWAPI::UnitType, BWAPI::Unit*> _techStructures;
00042         std::multimap<BWAPI::UnitType, ProducingUnit> _producingStructures;
00043         std::list<BWAPI::Unit*> _techStructuresInConstruction;
00044         std::list<BWAPI::Unit*> _producingStructuresInConstruction;
00045         std::multimap<int, BWAPI::UnitType> _productionQueue;
00046         std::map<BWAPI::UnitType, std::pair<int, int> > _wantedNumbers; // UnitType->(minimum number, increment)
00047         std::list<BWAPI::TechType> _techsQueue;
00048         std::list<BWAPI::UpgradeType> _upgradesQueue;
00049         std::map<BWAPI::Unit*, BWAPI::TechType> _researchingTech;
00050         std::map<BWAPI::Unit*, BWAPI::UpgradeType> _researchingUpgrade;
00051         std::set<BWAPI::UnitType> _neededProductionBuildings;
00052         int additionalUnitsSupply(int frames=30*24); // UnitTypes::Protoss_Pylon.buildTime()
00053         const BWAPI::UnitType& mostSaturatedUT();
00054         Producer();
00055         ~Producer();
00056 
00057         inline void addToProducingStructures(BWAPI::Unit* u);
00058         inline void mergeArchons();
00059         inline void freeMerging();
00060     int _nbArchons;
00061         int _nbDarkArchons;
00062         std::map<BWAPI::Unit*, int> _htsMerging;
00063         std::map<BWAPI::Unit*, int> _dtsMerging;
00064         std::list<BWAPI::Unit*> _hts;
00065         std::list<BWAPI::Unit*> _dts;
00066 };
00067 
00068 extern Producer* TheProducer;
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines