BWAPI
|
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> ¤tUnits); 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 };