bool Pathfinder::isReady(TilePosition start, TilePosition end) { PathObj* obj = getPathObj(start, end); if (obj != NULL) { return obj->isFinished(); } return false; }
vector<TilePosition> Pathfinder::getPath(TilePosition start, TilePosition end) { PathObj* obj = getPathObj(start, end); if (obj != NULL) { if (obj->isFinished()) { return obj->getPath(); } } return vector<TilePosition>(); }
int Pathfinder::getDistance(TilePosition start, TilePosition end) { PathObj* obj = getPathObj(start, end); if (obj != NULL) { if (obj->isFinished()) { return obj->getPath().size(); } } return 0; }
void Pathfinder::requestPath(TilePosition start, TilePosition end) { PathObj* obj = getPathObj(start, end); if (obj == NULL) { obj = new PathObj(start, end); pathObj.push_back(obj); } if ((int)pathObj.size() > 20) { lock = true; while (pathObj.size() > 20) { pathObj.erase(pathObj.begin()); } lock = false; } }
void Pathfinder::requestPath(TilePosition start, TilePosition end) { PathObj* obj = getPathObj(start, end); if (obj == NULL) { obj = new PathObj(start, end); pathObj.push_back(obj); } const static unsigned long CACHE_SIZE = 50; if ((int)pathObj.size() > CACHE_SIZE) { lock = true; while (pathObj.size() > CACHE_SIZE) { pathObj.erase(pathObj.begin()); } lock = false; } }