|
BWAPI
|
00001 #include "LatencyTracker.h" 00002 00003 const int StormRadius = 64; 00004 const int StasisRadius = 96; 00005 00006 void LatencyTrackerClass::update() 00007 { 00008 const int time = BWAPI::Broodwar->getFrameCount(); 00009 for(std::map<Unit, std::pair<Position, int>>::iterator it = mStormedPositions.begin(); it != mStormedPositions.end();) 00010 { 00011 if(!it->first->exists() || (it->first->getOrder() != BWAPI::Orders::CastPsionicStorm && time > it->second.second)) 00012 mStormedPositions.erase(it++); 00013 else 00014 ++it; 00015 } 00016 00017 for(std::map<Unit, std::pair<Position, int>>::iterator it = mStasisPositions.begin(); it != mStasisPositions.end();) 00018 { 00019 if(!it->first->exists() || (it->first->getOrder() != BWAPI::Orders::CastStasisField && time > it->second.second)) 00020 mStasisPositions.erase(it++); 00021 else 00022 ++it; 00023 } 00024 } 00025 00026 void LatencyTrackerClass::placingStorm(Unit unit, Position pos) 00027 { 00028 mStormedPositions[unit] = std::make_pair(pos, BWAPI::Broodwar->getFrameCount() + BWAPI::Broodwar->getRemainingLatencyFrames()); 00029 } 00030 00031 void LatencyTrackerClass::placingStasis(Unit unit, Position pos) 00032 { 00033 mStasisPositions[unit] = std::make_pair(pos, BWAPI::Broodwar->getFrameCount() + BWAPI::Broodwar->getRemainingLatencyFrames()); 00034 } 00035 00036 bool LatencyTrackerClass::isStormInRange(Unit unit) 00037 { 00038 if(mStormedPositions.empty()) 00039 return false; 00040 00041 for(std::map<Unit, std::pair<Position, int>>::iterator it = mStormedPositions.begin(); it != mStormedPositions.end(); ++it) 00042 { 00043 if(it->second.first.getApproxDistance(unit->getPosition()) <= StormRadius) 00044 return true; 00045 } 00046 00047 return false; 00048 } 00049 00050 bool LatencyTrackerClass::isStasisInRange(Unit unit) 00051 { 00052 if(mStasisPositions.empty()) 00053 return false; 00054 00055 for(std::map<Unit, std::pair<Position, int>>::iterator it = mStasisPositions.begin(); it != mStasisPositions.end(); ++it) 00056 { 00057 if(it->second.first.getApproxDistance(unit->getPosition()) <= StasisRadius) 00058 return true; 00059 } 00060 00061 return false; 00062 }
1.7.6.1