From 5a08b65cef34f5d955295e41bf2ead45990a6f0e Mon Sep 17 00:00:00 2001 From: jackpoz Date: Tue, 6 Jul 2021 20:51:19 +0200 Subject: [PATCH] Core/Maps: fixed a floating point issue when retrieving minHeight values from GridMap --- src/server/game/Grids/GridDefines.h | 11 +++++++++-- src/server/game/Maps/Map.cpp | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/server/game/Grids/GridDefines.h b/src/server/game/Grids/GridDefines.h index aad9b71129..b868ef9451 100644 --- a/src/server/game/Grids/GridDefines.h +++ b/src/server/game/Grids/GridDefines.h @@ -181,8 +181,8 @@ namespace Trinity double x_offset = (double(x) - center_offset)/size; double y_offset = (double(y) - center_offset)/size; - int x_val = int(x_offset + CENTER_VAL + 0.5f); - int y_val = int(y_offset + CENTER_VAL + 0.5f); + int x_val = int(x_offset + CENTER_VAL + 0.5); + int y_val = int(y_offset + CENTER_VAL + 0.5); return RET_TYPE(x_val, y_val); } @@ -191,6 +191,13 @@ namespace Trinity return Compute(x, y, CENTER_GRID_OFFSET, SIZE_OF_GRIDS); } + inline GridCoord ComputeGridCoordSimple(float x, float y) + { + int gx = (int)(CENTER_GRID_ID - x / SIZE_OF_GRIDS); + int gy = (int)(CENTER_GRID_ID - y / SIZE_OF_GRIDS); + return GridCoord((MAX_NUMBER_OF_GRIDS - 1) - gx, (MAX_NUMBER_OF_GRIDS - 1) - gy); + } + inline CellCoord ComputeCellCoord(float x, float y) { return Compute(x, y, CENTER_GRID_CELL_OFFSET, SIZE_OF_GRID_CELL); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 46e16c3ada..dbd9a0dc7d 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2271,7 +2271,7 @@ float GridMap::getMinHeight(float x, float y) const if (!_minHeightPlanes) return -500.0f; - GridCoord gridCoord = Trinity::ComputeGridCoord(x, y); + GridCoord gridCoord = Trinity::ComputeGridCoordSimple(x, y); int32 doubleGridX = int32(std::floor(-(x - MAP_HALFSIZE) / CENTER_GRID_OFFSET)); int32 doubleGridY = int32(std::floor(-(y - MAP_HALFSIZE) / CENTER_GRID_OFFSET));