diff options
Diffstat (limited to 'src/map.cpp')
-rw-r--r-- | src/map.cpp | 125 |
1 files changed, 0 insertions, 125 deletions
diff --git a/src/map.cpp b/src/map.cpp index 4e654198c..70a48b811 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -800,131 +800,6 @@ const std::string Map::getFilename() const return fileName.substr(lastSlash, fileName.rfind(".") - lastSlash); } -#ifdef MANASERV_SUPPORT -Position Map::checkNodeOffsets(int radius, const unsigned char walkMask, - const Position &position) const -{ - // Pre-computing character's position in tiles - const int tx = position.x / mapTileSize; - const int ty = position.y / mapTileSize; - - // Pre-computing character's position offsets. - int fx = position.x % mapTileSize; - int fy = position.y % mapTileSize; - - // Compute the being radius: - // FIXME: Hande beings with more than 1/2 tile radius by not letting them - // go or spawn in too narrow places. The server will have to be aware - // of being's radius value (in tiles) to handle this gracefully. - if (radius > mapTileSize / 2) - radius = mapTileSize / 2; - // set a default value if no value returned. - if (radius < 1) - radius = mapTileSize / 3; - - // We check diagonal first as they are more restrictive. - // Top-left border check - if (!getWalk(tx - 1, ty - 1, walkMask) - && fy < radius && fx < radius) - { - fx = radius; - fy = radius; - } - // Top-right border check - if (!getWalk(tx + 1, ty - 1, walkMask) - && (fy < radius) && fx > (mapTileSize - radius)) - { - fx = mapTileSize - radius; - fy = radius; - } - // Bottom-left border check - if (!getWalk(tx - 1, ty + 1, walkMask) - && fy > (mapTileSize - radius) && fx < radius) - { - fx = radius; - fy = mapTileSize - radius; - } - // Bottom-right border check - if (!getWalk(tx + 1, ty + 1, walkMask) - && fy > (mapTileSize - radius) && fx > (mapTileSize - radius)) - { - fx = mapTileSize - radius; - fy = fx; - } - - // Fix coordinates so that the player does not seem to dig into walls. - if (fx > (mapTileSize - radius) && !getWalk(tx + 1, ty, walkMask)) - fx = mapTileSize - radius; - else if (fx < radius && !getWalk(tx - 1, ty, walkMask)) - fx = radius; - else if (fy > (mapTileSize - radius) && !getWalk(tx, ty + 1, walkMask)) - fy = mapTileSize - radius; - else if (fy < radius && !getWalk(tx, ty - 1, walkMask)) - fy = radius; - - return Position(tx * mapTileSize + fx, ty * mapTileSize + fy); -} - -Path Map::findPixelPath(const int startPixelX, const int startPixelY, - const int endPixelX, const int endPixelY, - const int radius, const unsigned char walkMask, - const int maxCost) -{ - Path myPath = findPath(startPixelX / mapTileSize, - startPixelY / mapTileSize, - endPixelX / mapTileSize, - endPixelY / mapTileSize, - walkMask, maxCost); - - // Don't compute empty coordinates. - if (myPath.empty()) - return myPath; - - // Find the starting offset - const float startOffsetX = static_cast<float>(startPixelX % mapTileSize); - const float startOffsetY = static_cast<float>(startPixelY % mapTileSize); - - // Find the ending offset - const float endOffsetX = static_cast<float>(endPixelX % mapTileSize); - const float endOffsetY = static_cast<float>(endPixelY % mapTileSize); - - const int sz = static_cast<int>(myPath.size()); - // Find the distance, and divide it by the number of steps - const int changeX = static_cast<int>((endOffsetX - startOffsetX) - / static_cast<float>(sz)); - const int changeY = static_cast<int>((endOffsetY - startOffsetY) - / static_cast<float>(sz)); - - // Convert the map path to pixels over tiles - // And add interpolation between the starting and ending offsets - Path::iterator it = myPath.begin(); - const Path::iterator it_end = myPath.end(); - int i = 0; - while (it != it_end) - { - // A position that is valid on the start and end tile is not - // necessarily valid on all the tiles in between, so check the offsets. - *it = checkNodeOffsets(radius, walkMask, - it->x * mapTileSize + startOffsetX - + static_cast<float>(changeX * i), - it->y * mapTileSize + startOffsetY - + static_cast<float>(changeY * i)); - i++; - ++it; - } - - // Remove the last path node, as it's more clever to go to the destination. - // It also permit to avoid zigzag at the end of the path, - // especially with mouse. - const Position destination = checkNodeOffsets(radius, walkMask, - endPixelX, endPixelY); - myPath.pop_back(); - myPath.push_back(destination); - - return myPath; -} -#endif - Path Map::findPath(const int startX, const int startY, const int destX, const int destY, const unsigned char walkmask, const int maxCost) |