예제 #1
0
bool Pathfinder::isReady(TilePosition start, TilePosition end)
{
	PathObj* obj = getPathObj(start, end);
	if (obj != NULL)
	{
		return obj->isFinished();
	}
	return false;
}
예제 #2
0
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>();
}
예제 #3
0
int Pathfinder::getDistance(TilePosition start, TilePosition end)
{
	PathObj* obj = getPathObj(start, end);
	if (obj != NULL)
	{
		if (obj->isFinished())
		{
			return obj->getPath().size();
		}
	}
	return 0;
}
예제 #4
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;
	}
}
예제 #5
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);
	}

	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;
	}
}