1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-14 13:41:12 +00:00

Fixes for multi-node editing interactions.

1. When having 2 nodes selected, deselecting one in the ScemeTreeDock would keep the inspector in MultiNodeEdit rather than editing the one remaining node directly. This is now fixed. Closes #49451
2. In the Node3D editor, Shift-Selecting a region (drag selecting) would *deselect* nodes which were already selected, and select ones which were not, essentially inverting the selection. This is now fixed - shift-drag-selecting will only add nodes to the selection. To deselect, individual nodes can be clicked on. I am not sure if there is an issue open for this - it was a bug I found while testing other changes.
3. Other minor code cleanup.
This commit is contained in:
Eric M
2021-06-19 12:25:24 +10:00
parent 9b0800cbf9
commit 83cb48e69e
3 changed files with 31 additions and 15 deletions

View File

@@ -467,22 +467,31 @@ void Node3DEditorViewport::_select_clicked(bool p_append, bool p_single, bool p_
}
void Node3DEditorViewport::_select(Node *p_node, bool p_append, bool p_single) {
if (!p_append) {
editor_selection->clear();
}
if (editor_selection->is_selected(p_node)) {
//erase
editor_selection->remove_node(p_node);
} else {
// Add or remove a single node from the selection
if (p_append && p_single) {
if (editor_selection->is_selected(p_node)) {
// Already in the selection, remove it from the selected nodes
editor_selection->remove_node(p_node);
} else {
// Add the item to the selection
editor_selection->add_node(p_node);
}
} else if (p_append && !p_single) {
// Add the item to the selection
editor_selection->add_node(p_node);
}
if (p_single) {
} else {
// No append; single select
editor_selection->clear();
editor_selection->add_node(p_node);
// Reselect
if (Engine::get_singleton()->is_editor_hint()) {
editor->call("edit_node", p_node);
}
}
if (editor_selection->get_selected_node_list().size() == 1) {
editor->push_item(editor_selection->get_selected_node_list()[0]);
}
}
ObjectID Node3DEditorViewport::_select_ray(const Point2 &p_pos, bool p_append, bool &r_includes_current, int *r_gizmo_handle, bool p_alt_select) {