From bf9fdc5b96f60bbf24054f3c1b21a89007eaaa6c Mon Sep 17 00:00:00 2001 From: oeelis <29158407+EelisOtsamo@users.noreply.github.com> Date: Mon, 13 Nov 2023 07:53:30 +0200 Subject: [PATCH] Ignore locked nodes when click selecting in 3d editor When selecting 3d nodes with a single click, the node closest to the camera is selected. If the closest node was locked, it would block the selection, even when there was unlocked nodes behind the locked node. This PR replaces the `_select_ray` method call used to find the closest node with the similar `_find_items_at_pos` method, which can skip any locked nodes. Fixes #84764 --- editor/plugins/node_3d_editor_plugin.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 22300fe851d..6850a79ce6f 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -1918,12 +1918,17 @@ void Node3DEditorViewport::_sinput(const Ref &p_event) { } if (after != EditorPlugin::AFTER_GUI_INPUT_CUSTOM) { - //clicking is always deferred to either move or release - clicked = _select_ray(b->get_position()); + // Single item selection. + Vector<_RayResult> selection; + _find_items_at_pos(b->get_position(), selection, false); + if (!selection.is_empty()) { + clicked = selection[0].item->get_instance_id(); + } + selection_in_progress = true; if (clicked.is_null()) { - //default to regionselect + // Default to region select. cursor.region_select = true; cursor.region_begin = b->get_position(); cursor.region_end = b->get_position();