diff --git a/editor/plugins/tiles/tile_map_layer_editor.cpp b/editor/plugins/tiles/tile_map_layer_editor.cpp index 4fd11c2966d..abb349e1d84 100644 --- a/editor/plugins/tiles/tile_map_layer_editor.cpp +++ b/editor/plugins/tiles/tile_map_layer_editor.cpp @@ -803,18 +803,7 @@ bool TileMapLayerEditorTilesPlugin::forward_canvas_gui_input(const Ref tile_set = edited_layer->get_tile_set(); - if (tile_set.is_null()) { - return; - } - - if (!edited_layer->is_visible_in_tree()) { - return; - } Transform2D xform = CanvasItemEditor::get_singleton()->get_canvas_transform() * edited_layer->get_global_transform_with_canvas(); Vector2 mpos = edited_layer->get_local_mouse_position(); @@ -3181,18 +3170,7 @@ bool TileMapLayerEditorTerrainsPlugin::forward_canvas_gui_input(const Ref tile_set = edited_layer->get_tile_set(); - if (tile_set.is_null()) { - return; - } - - if (!edited_layer->is_visible_in_tree()) { - return; - } Transform2D xform = CanvasItemEditor::get_singleton()->get_canvas_transform() * edited_layer->get_global_transform_with_canvas(); Vector2 mpos = edited_layer->get_local_mouse_position(); @@ -3749,6 +3727,12 @@ void TileMapLayerEditor::_notification(int p_what) { _update_bottom_panel(); _update_layers_selector(); tabs_plugins[tabs_bar->get_current_tab()]->tile_set_changed(); + + const TileMapLayer *edited_layer = _get_edited_layer(); + if (edited_layer && custom_overlay) { + custom_overlay->set_texture_filter(edited_layer->get_texture_filter_in_tree()); + } + CanvasItemEditor::get_singleton()->update_viewport(); tile_map_layer_changed_needs_update = false; } @@ -4280,8 +4264,21 @@ bool TileMapLayerEditor::forward_canvas_gui_input(const Ref &p_event } void TileMapLayerEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { + if (!custom_overlay) { + custom_overlay = memnew(Control); + custom_overlay->set_anchors_and_offsets_preset(Control::PRESET_FULL_RECT); + custom_overlay->set_mouse_filter(Control::MOUSE_FILTER_IGNORE); + custom_overlay->set_clip_contents(true); + custom_overlay->set_draw_behind_parent(true); + p_overlay->add_child(custom_overlay); + custom_overlay->connect(SceneStringName(draw), callable_mp(this, &TileMapLayerEditor::_draw_overlay)); + } + custom_overlay->queue_redraw(); +} + +void TileMapLayerEditor::_draw_overlay() { const TileMapLayer *edited_layer = _get_edited_layer(); - if (!edited_layer) { + if (!edited_layer || !edited_layer->is_visible_in_tree()) { return; } @@ -4290,10 +4287,6 @@ void TileMapLayerEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { return; } - if (!edited_layer->is_visible_in_tree()) { - return; - } - Transform2D xform = CanvasItemEditor::get_singleton()->get_canvas_transform() * edited_layer->get_global_transform_with_canvas(); Transform2D xform_inv = xform.affine_inverse(); Vector2i tile_shape_size = tile_set->get_tile_size(); @@ -4328,7 +4321,7 @@ void TileMapLayerEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { Transform2D tile_xform; tile_xform.set_origin(tile_set->map_to_local(coords)); tile_xform.set_scale(tile_shape_size); - tile_set->draw_tile_shape(p_overlay, xform * tile_xform, color, true, warning_pattern_texture); + tile_set->draw_tile_shape(custom_overlay, xform * tile_xform, color, true, warning_pattern_texture); // Draw the warning icon. Vector2::Axis min_axis = missing_tile_texture->get_size().min_axis_index(); @@ -4336,7 +4329,7 @@ void TileMapLayerEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { icon_size[min_axis] = tile_set->get_tile_size()[min_axis] / 3; icon_size[(min_axis + 1) % 2] = (icon_size[min_axis] * missing_tile_texture->get_size()[(min_axis + 1) % 2] / missing_tile_texture->get_size()[min_axis]); Rect2 rect = Rect2(xform.xform(tile_set->map_to_local(coords)) - (icon_size * xform.get_scale() / 2), icon_size * xform.get_scale()); - p_overlay->draw_texture_rect(missing_tile_texture, rect); + custom_overlay->draw_texture_rect(missing_tile_texture, rect); } } } @@ -4345,7 +4338,7 @@ void TileMapLayerEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { const int fading = 5; // Determine the drawn area. - Size2 screen_size = p_overlay->get_size(); + Size2 screen_size = custom_overlay->get_size(); Rect2i screen_rect; screen_rect.position = tile_set->local_to_map(xform_inv.xform(Vector2())); screen_rect.expand_to(tile_set->local_to_map(xform_inv.xform(Vector2(0, screen_size.height)))); @@ -4387,7 +4380,7 @@ void TileMapLayerEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { tile_xform.set_scale(tile_shape_size); Color color = grid_color; color.a = color.a * opacity; - tile_set->draw_tile_shape(p_overlay, xform * tile_xform, color, false); + tile_set->draw_tile_shape(custom_overlay, xform * tile_xform, color, false); } } } @@ -4396,12 +4389,12 @@ void TileMapLayerEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { /*Ref font = get_theme_font(SceneStringName(font), SNAME("Label")); for (int x = displayed_rect.position.x; x < (displayed_rect.position.x + displayed_rect.size.x); x++) { for (int y = displayed_rect.position.y; y < (displayed_rect.position.y + displayed_rect.size.y); y++) { - p_overlay->draw_string(font, xform.xform(tile_set->map_to_local(Vector2(x, y))) + Vector2i(-tile_shape_size.x / 2, 0), vformat("%s", Vector2(x, y))); + custom_overlay->draw_string(font, xform.xform(tile_set->map_to_local(Vector2(x, y))) + Vector2i(-tile_shape_size.x / 2, 0), vformat("%s", Vector2(x, y))); } }*/ // Draw the plugins. - tabs_plugins[tabs_bar->get_current_tab()]->forward_canvas_draw_over_viewport(p_overlay); + tabs_plugins[tabs_bar->get_current_tab()]->forward_canvas_draw_over_viewport(custom_overlay); } void TileMapLayerEditor::edit(Object *p_edited) { diff --git a/editor/plugins/tiles/tile_map_layer_editor.h b/editor/plugins/tiles/tile_map_layer_editor.h index 70181ca1e75..4ce45325f46 100644 --- a/editor/plugins/tiles/tile_map_layer_editor.h +++ b/editor/plugins/tiles/tile_map_layer_editor.h @@ -348,6 +348,9 @@ private: void _update_tile_map_layers_in_scene_list_cache(); void _node_change(Node *p_node); + Control *custom_overlay = nullptr; + void _draw_overlay(); + // Vector to keep plugins. Vector tile_map_editor_plugins;