BWAPI
|
00001 #include "Condition.h" 00002 00003 #include <cassert> 00004 00005 #include "MapHelper.h" 00006 #include "WallTracker.h" 00007 #include "PlayerTracker.h" 00008 #include "MacroManager.h" 00009 00010 Condition::Condition(ConditionTest type, bool expectedValue) 00011 : mType(type) 00012 , mOperatorType(OperatorType::None) 00013 , mLCondition() 00014 , mRCondition() 00015 , mNeededValue(expectedValue) 00016 , mExtraInt(0) 00017 , mExtraDouble(0) 00018 , mUnitType(BWAPI::UnitTypes::None) 00019 , mTech(BWAPI::TechTypes::None) 00020 , mUpgrade(BWAPI::UpgradeTypes::None) 00021 , mString() 00022 { 00023 } 00024 00025 Condition::Condition(ConditionTest type, int extraValue) 00026 : mType(type) 00027 , mOperatorType(OperatorType::None) 00028 , mLCondition() 00029 , mRCondition() 00030 , mNeededValue(false) 00031 , mExtraInt(extraValue) 00032 , mExtraDouble(0) 00033 , mUnitType(BWAPI::UnitTypes::None) 00034 , mTech(BWAPI::TechTypes::None) 00035 , mUpgrade(BWAPI::UpgradeTypes::None) 00036 , mString() 00037 { 00038 } 00039 00040 Condition::Condition(ConditionTest type, bool expectedValue, int extraValue) 00041 : mType(type) 00042 , mOperatorType(OperatorType::None) 00043 , mLCondition() 00044 , mRCondition() 00045 , mNeededValue(expectedValue) 00046 , mExtraInt(extraValue) 00047 , mExtraDouble(0) 00048 , mUnitType(BWAPI::UnitTypes::None) 00049 , mTech(BWAPI::TechTypes::None) 00050 , mUpgrade(BWAPI::UpgradeTypes::None) 00051 , mString() 00052 { 00053 } 00054 00055 Condition::Condition(ConditionTest type, double extraValue) 00056 : mType(type) 00057 , mOperatorType(OperatorType::None) 00058 , mLCondition() 00059 , mRCondition() 00060 , mNeededValue(false) 00061 , mExtraInt(0) 00062 , mExtraDouble(extraValue) 00063 , mUnitType(BWAPI::UnitTypes::None) 00064 , mTech(BWAPI::TechTypes::None) 00065 , mUpgrade(BWAPI::UpgradeTypes::None) 00066 , mString() 00067 { 00068 } 00069 00070 Condition::Condition(ConditionTest type, bool expectedValue, double extraValue) 00071 : mType(type) 00072 , mOperatorType(OperatorType::None) 00073 , mLCondition() 00074 , mRCondition() 00075 , mNeededValue(expectedValue) 00076 , mExtraInt(0) 00077 , mExtraDouble(extraValue) 00078 , mUnitType(BWAPI::UnitTypes::None) 00079 , mTech(BWAPI::TechTypes::None) 00080 , mUpgrade(BWAPI::UpgradeTypes::None) 00081 , mString() 00082 { 00083 } 00084 Condition::Condition(ConditionTest type, BWAPI::UnitType unitType, int count) 00085 : mType(type) 00086 , mOperatorType(OperatorType::None) 00087 , mLCondition() 00088 , mRCondition() 00089 , mNeededValue(false) 00090 , mExtraInt(count) 00091 , mExtraDouble(0) 00092 , mUnitType(unitType) 00093 , mTech(BWAPI::TechTypes::None) 00094 , mUpgrade(BWAPI::UpgradeTypes::None) 00095 , mString() 00096 { 00097 } 00098 00099 Condition::Condition(ConditionTest type, BWAPI::TechType tech) 00100 : mType(type) 00101 , mOperatorType(OperatorType::None) 00102 , mLCondition() 00103 , mRCondition() 00104 , mNeededValue(false) 00105 , mExtraInt(0) 00106 , mExtraDouble(0) 00107 , mUnitType(BWAPI::UnitTypes::None) 00108 , mTech(tech) 00109 , mUpgrade(BWAPI::UpgradeTypes::None) 00110 , mString() 00111 { 00112 } 00113 00114 Condition::Condition(ConditionTest type, BWAPI::UpgradeType upgrade, int level) 00115 : mType(type) 00116 , mOperatorType(OperatorType::None) 00117 , mLCondition() 00118 , mRCondition() 00119 , mNeededValue(false) 00120 , mExtraInt(level) 00121 , mExtraDouble(0) 00122 , mUnitType(BWAPI::UnitTypes::None) 00123 , mTech(BWAPI::TechTypes::None) 00124 , mUpgrade(upgrade) 00125 , mString() 00126 { 00127 } 00128 00129 Condition::Condition(ConditionTest type, std::string string) 00130 : mType(type) 00131 , mOperatorType(OperatorType::None) 00132 , mLCondition() 00133 , mRCondition() 00134 , mNeededValue(false) 00135 , mExtraInt(0) 00136 , mExtraDouble(0) 00137 , mUnitType(BWAPI::UnitTypes::None) 00138 , mTech(BWAPI::TechTypes::None) 00139 , mUpgrade(BWAPI::UpgradeTypes::None) 00140 , mString(string) 00141 { 00142 } 00143 00144 bool Condition::passesValue() const 00145 { 00146 switch(mType.underlying()) 00147 { 00148 case ConditionTest::myUnitTotalBuildCountGreaterEqualThan: 00149 return BWAPI::Broodwar->self()->deadUnitCount(mUnitType) + MacroManager::Instance().getPlannedTotal(mUnitType) >= mExtraInt; 00150 case ConditionTest::myUnitTotalBuildCountLessThan: 00151 return BWAPI::Broodwar->self()->deadUnitCount(mUnitType) + MacroManager::Instance().getPlannedTotal(mUnitType) < mExtraInt; 00152 case ConditionTest::enemyUnitCountGreaterEqualThan: 00153 return PlayerTracker::Instance().enemyUnitCount(mUnitType) >= mExtraInt; 00154 case ConditionTest::enemyDoesntHasUnitLessThan: 00155 return PlayerTracker::Instance().enemyUnitCount(mUnitType) < mExtraInt; 00156 case ConditionTest::minDistanceBetweenMainsLessThan: 00157 //return MapInformation::Instance().minMainDistance() < mExtraFloat; 00158 case ConditionTest::minDistanceBetweenMainsGreaterThan: 00159 //return MapInformation::Instance().minMainDistance() > mExtraFloat; 00160 case ConditionTest::None: 00161 return mNeededValue; 00162 case ConditionTest::isEnemyProtoss: 00163 return PlayerTracker::Instance().isEnemyRace(BWAPI::Races::Protoss) == mNeededValue; 00164 case ConditionTest::isEnemyZerg: 00165 return PlayerTracker::Instance().isEnemyRace(BWAPI::Races::Zerg) == mNeededValue; 00166 case ConditionTest::isEnemyTerran: 00167 return PlayerTracker::Instance().isEnemyRace(BWAPI::Races::Terran) == mNeededValue; 00168 case ConditionTest::enemyHasResearched: 00169 return PlayerTracker::Instance().enemyHasReseached(mTech); 00170 case ConditionTest::mapSize: 00171 return BWAPI::Broodwar->getStartLocations().size() == mExtraInt; 00172 case ConditionTest::numberOfEnemies: 00173 return PlayerTracker::Instance().getEnemies().size() == mExtraInt; 00174 case ConditionTest::canForgeExpand: 00175 return WallTracker::Instance().canForgeExpand(); 00176 case ConditionTest::myPlannedUnitTotalGreaterEqualThan: 00177 return MacroManager::Instance().getPlannedTotal(mUnitType) >= mExtraInt; 00178 case ConditionTest::myPlannedUnitTotalLessThan: 00179 return MacroManager::Instance().getPlannedTotal(mUnitType) < mExtraInt; 00180 case ConditionTest::mapIs: 00181 return MapHelper::mapIs(mString); 00182 case ConditionTest::isResearching: 00183 return BWAPI::Broodwar->self()->isResearching(mTech) || BWAPI::Broodwar->self()->hasResearched(mTech); 00184 case ConditionTest::isResearched: 00185 return BWAPI::Broodwar->self()->hasResearched(mTech); 00186 case ConditionTest::isUpgrading: 00187 return BWAPI::Broodwar->self()->isUpgrading(mUpgrade) && (mExtraInt == 1 || BWAPI::Broodwar->self()->getUpgradeLevel(mUpgrade) == mExtraInt-1); 00188 case ConditionTest::isUpgraded: 00189 return BWAPI::Broodwar->self()->getUpgradeLevel(mUpgrade) == mExtraInt; 00190 } 00191 return false; 00192 }