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.
This commit is contained in:
Maganty Rushyendra 2020-08-04 23:54:59 +08:00
parent ec678c5e94
commit cf04aabef1
1 changed files with 3 additions and 3 deletions

View File

@ -886,17 +886,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) {