Parcourir la source

Fix tile placement preview for rotated, skewed or scaled TileMaps

Ensures that the editor preview when placing a tile on a TileMap takes
into account the transformation of the TileMap. Previously, only the
origin of the Tile was transformed, but not its orientation or
scaling.

(cherry picked from commit cf04aabef13629b01d6bbf724ca1ab60e041d656)
Maganty Rushyendra il y a 5 ans
Parent
commit
69dc9c9417
1 fichiers modifiés avec 3 ajouts et 3 suppressions
  1. 3 3
      editor/plugins/tile_map_editor_plugin.cpp

+ 3 - 3
editor/plugins/tile_map_editor_plugin.cpp

@@ -895,17 +895,17 @@ void TileMapEditor::_draw_cell(Control *p_viewport, int p_cell, const Point2i &p
 		rect.position += tile_ofs;
 		rect.position += tile_ofs;
 	}
 	}
 
 
-	rect.position = p_xform.xform(rect.position);
-	rect.size *= sc;
-
 	Color modulate = node->get_tileset()->tile_get_modulate(p_cell);
 	Color modulate = node->get_tileset()->tile_get_modulate(p_cell);
 	modulate.a = 0.5;
 	modulate.a = 0.5;
 
 
+	Transform2D old_transform = p_viewport->get_viewport_transform();
+	p_viewport->draw_set_transform_matrix(p_xform); // Take into account TileMap transformation when displaying cell
 	if (r.has_no_area()) {
 	if (r.has_no_area()) {
 		p_viewport->draw_texture_rect(t, rect, false, modulate, p_transpose);
 		p_viewport->draw_texture_rect(t, rect, false, modulate, p_transpose);
 	} else {
 	} else {
 		p_viewport->draw_texture_rect_region(t, rect, r, modulate, p_transpose);
 		p_viewport->draw_texture_rect_region(t, rect, r, modulate, p_transpose);
 	}
 	}
+	p_viewport->draw_set_transform_matrix(old_transform);
 }
 }
 
 
 void TileMapEditor::_draw_fill_preview(Control *p_viewport, int p_cell, const Point2i &p_point, bool p_flip_h, bool p_flip_v, bool p_transpose, const Point2i &p_autotile_coord, const Transform2D &p_xform) {
 void TileMapEditor::_draw_fill_preview(Control *p_viewport, int p_cell, const Point2i &p_point, bool p_flip_h, bool p_flip_v, bool p_transpose, const Point2i &p_autotile_coord, const Transform2D &p_xform) {