浏览代码

TileMap::world_to_map Ensure half offset is added according to the returned value

Decide whether half offset should be added based on the value used for calculating the return value of this method.

(cherry picked from commit f1420c7cbfa778da0b2f1e35373044cd0e59b9d0)
kleonc 4 年之前
父节点
当前提交
1184013fcf
共有 1 个文件被更改,包括 6 次插入5 次删除
  1. 6 5
      scene/2d/tile_map.cpp

+ 6 - 5
scene/2d/tile_map.cpp

@@ -1535,6 +1535,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) {
@@ -1561,11 +1567,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();
 }