BWAPI
Skynet/Skynet/Condition.cpp
Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines