BWAPI
|
00001 #include "MineDragAction.h" 00002 00003 #include <limits> 00004 00005 #include "UnitTracker.h" 00006 #include "UnitInformation.h" 00007 00008 bool MineDragAction::update(const Goal &squadGoal, const UnitGroup &squadUnitGroup) 00009 { 00010 for each(Unit unit in UnitInformation::Instance().getUnitsTargetting(mUnit)) 00011 { 00012 if(unit->getType() == BWAPI::UnitTypes::Terran_Vulture_Spider_Mine) 00013 { 00014 int distance = std::numeric_limits<int>::max(); 00015 Unit closestUnit; 00016 00017 for each(Unit enemyUnit in UnitTracker::Instance().selectAllEnemy()) 00018 { 00019 if(enemyUnit->getType().isFlyer() || enemyUnit->isLifted() || enemyUnit->getType().isBuilding() || enemyUnit->getType() == BWAPI::UnitTypes::Terran_Vulture_Spider_Mine) 00020 continue; 00021 00022 int thisDistance = mUnit->getDistance(enemyUnit); 00023 if(thisDistance < distance) 00024 { 00025 distance = distance; 00026 closestUnit = enemyUnit; 00027 } 00028 } 00029 00030 if(closestUnit && distance < 32*3) 00031 { 00032 mUnit->attack(closestUnit); 00033 return true; 00034 } 00035 else 00036 { 00037 mUnit->move(unit->getPosition()); 00038 return true; 00039 } 00040 } 00041 } 00042 00043 return false; 00044 }