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