BWAPI
Skynet/Skynet/RequirementGroup.h
Go to the documentation of this file.
00001 #pragma once
00002 
00003 #include "Interface.h"
00004 
00005 #include "Requirement.h"
00006 #include "UnitGroup.h"
00007 
00008 class RequirementGroup
00009 {
00010 public:
00011         RequirementGroup();
00012 
00013         std::pair<int, int> earliestTime();
00014 
00015         bool operator==(const RequirementGroup& other) const;
00016         bool operator<(const RequirementGroup& other) const;
00017 
00018         void reserve(int time);
00019 
00020         bool empty() const;
00021         void clear();
00022 
00023         UnitGroup getUnits() const;
00024 
00025         inline void addMineralRequirement(int minerals) { mOtherRequirements.push_back(Requirement(RequirementType(RequirementType::Mineral), minerals)); }
00026         inline void addGasRequirement(int gas) { mOtherRequirements.push_back(Requirement(RequirementType(RequirementType::Gas), gas)); }
00027         inline void addSupplyRequirement(int supply) { mOtherRequirements.push_back(Requirement(RequirementType(RequirementType::Supply), supply)); }
00028         inline void addTimeRequirement(int time) { mOtherRequirements.push_back(Requirement(RequirementType(RequirementType::Time), time)); }
00029 
00030         inline void addUnitRequirement(Unit unit, int priority, int duration, Position position = BWAPI::Positions::None) { mUnitRequirements.push_back(Requirement(priority, duration, unit, position)); }
00031         inline void addUnitFilterRequirement(int priority, int duration, UnitFilter unitFilter, Position position = BWAPI::Positions::None) { mUnitRequirements.push_back(Requirement(priority, duration, unitFilter, position)); }
00032         void addUnitFilterRequirement(int priority, int duration, UnitFilter unitFilter, int quantity, Position position = BWAPI::Positions::None);
00033 
00034         inline void addTechForTypeRequirement(BWAPI::UnitType unitType) { mOtherRequirements.push_back(Requirement(unitType)); }
00035         inline void addTechForTypeRequirement(BWAPI::UpgradeType upgradeType, int level) { mOtherRequirements.push_back(Requirement(upgradeType, level)); }
00036         inline void addTechForTypeRequirement(BWAPI::TechType techType) { mOtherRequirements.push_back(Requirement(techType)); }
00037 
00038 private:
00039         bool recurseForUnitTime(int &latestTime, std::vector<Requirement>::iterator currentRequirement, int currentStartTime, int currentEndTime, std::set<Unit> &currentUnits);
00040 
00041         std::vector<Requirement> mOtherRequirements;
00042 
00043         // ass units are reserved in slots, they need to be calculated recursively so keep them separated
00044         std::vector<Requirement> mUnitRequirements;
00045 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines