diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2021-05-04 12:16:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-04 12:16:04 +0200 |
commit | 6b2150c60e030db4b90001dcc09fbc07aa0e682e (patch) | |
tree | 48095ae29b7a72feb73ab30ab8bb210aa73a6752 | |
parent | bee7f8ff2369debb873efd90ea3d282392c7a35b (diff) | |
parent | f1420c7cbfa778da0b2f1e35373044cd0e59b9d0 (diff) |
Merge pull request #48394 from kleonc/tilemap-world_to_map-hack-fix
TileMap::world_to_map Ensure half offset is added according to the returned value
-rw-r--r-- | scene/2d/tile_map.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 4565543ec3..532a795b7c 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -1526,6 +1526,12 @@ Vector2 TileMap::map_to_world(const Vector2 &p_pos, bool p_ignore_ofs) const { Vector2 TileMap::world_to_map(const Vector2 &p_pos) const { Vector2 ret = get_cell_transform().affine_inverse().xform(p_pos); + // Account for precision errors on the border (GH-23250). + // 0.00005 is 5*CMP_EPSILON, results would start being unpredictable if + // cell size is > 15,000, but we can hardly have more precision anyway with + // floating point. + ret += Vector2(0.00005, 0.00005); + switch (half_offset) { case HALF_OFFSET_X: { if (int(floor(ret.y)) & 1) { @@ -1552,11 +1558,6 @@ Vector2 TileMap::world_to_map(const Vector2 &p_pos) const { } } - // Account for precision errors on the border (GH-23250). - // 0.00005 is 5*CMP_EPSILON, results would start being unpredictable if - // cell size is > 15,000, but we can hardly have more precision anyway with - // floating point. - ret += Vector2(0.00005, 0.00005); return ret.floor(); } |