Clarify API for top selected nodes in EditorSelection and make public

This commit is contained in:
Aaron Franke 2024-12-01 06:40:29 -08:00
parent 594d64ec24
commit 17db92b8b8
No known key found for this signature in database
GPG key ID: 40A1750B977E56BF
12 changed files with 119 additions and 102 deletions

View file

@ -662,7 +662,7 @@ int Node3DEditorViewport::get_selected_count() const {
}
void Node3DEditorViewport::cancel_transform() {
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *E : selection) {
Node3D *sp = Object::cast_to<Node3D>(E);
@ -791,7 +791,8 @@ void Node3DEditorViewport::_select_clicked(bool p_allow_locked) {
if (p_allow_locked || (selected != nullptr && !_is_node_locked(selected))) {
if (clicked_wants_append) {
Node *active_node = editor_selection->get_selected_node_list().is_empty() ? nullptr : editor_selection->get_selected_node_list().back()->get();
const List<Node *> &top_node_list = editor_selection->get_top_selected_node_list();
const Node *active_node = top_node_list.is_empty() ? nullptr : top_node_list.back()->get();
if (editor_selection->is_selected(selected)) {
editor_selection->remove_node(selected);
if (selected != active_node) {
@ -808,8 +809,9 @@ void Node3DEditorViewport::_select_clicked(bool p_allow_locked) {
}
}
if (editor_selection->get_selected_node_list().size() == 1) {
EditorNode::get_singleton()->edit_node(editor_selection->get_selected_node_list().front()->get());
const List<Node *> &top_node_list = editor_selection->get_top_selected_node_list();
if (top_node_list.size() == 1) {
EditorNode::get_singleton()->edit_node(top_node_list.front()->get());
}
}
}
@ -1139,8 +1141,9 @@ void Node3DEditorViewport::_select_region() {
}
}
if (editor_selection->get_selected_node_list().size() == 1) {
EditorNode::get_singleton()->edit_node(editor_selection->get_selected_node_list().front()->get());
const List<Node *> &top_node_list = editor_selection->get_top_selected_node_list();
if (top_node_list.size() == 1) {
EditorNode::get_singleton()->edit_node(top_node_list.front()->get());
}
}
@ -1227,7 +1230,7 @@ void Node3DEditorViewport::_compute_edit(const Point2 &p_point) {
se->original_local = selected->get_transform();
se->original = selected->get_global_transform();
} else {
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *E : selection) {
Node3D *sp = Object::cast_to<Node3D>(E);
@ -2430,7 +2433,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
return;
}
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *E : selection) {
Node3D *sp = Object::cast_to<Node3D>(E);
@ -2471,7 +2474,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
begin_transform(TRANSFORM_SCALE, true);
}
}
if (ED_IS_SHORTCUT("spatial_editor/collision_reposition", p_event) && editor_selection->get_selected_node_list().size() == 1 && !collision_reposition) {
if (ED_IS_SHORTCUT("spatial_editor/collision_reposition", p_event) && editor_selection->get_top_selected_node_list().size() == 1 && !collision_reposition) {
if (_edit.mode == TRANSFORM_NONE || _edit.instant) {
if (_edit.mode == TRANSFORM_NONE) {
_compute_edit(_edit.mouse_pos);
@ -3173,7 +3176,7 @@ void Node3DEditorViewport::_notification(int p_what) {
selected_node = ruler_start_point;
}
} else {
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
if (selection.size() == 1) {
selected_node = Object::cast_to<Node3D>(selection.front()->get());
}
@ -3566,7 +3569,7 @@ void Node3DEditorViewport::_menu_option(int p_option) {
Transform3D camera_transform = camera->get_global_transform();
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
undo_redo->create_action(TTR("Align Transform with View"));
@ -3612,7 +3615,7 @@ void Node3DEditorViewport::_menu_option(int p_option) {
Transform3D camera_transform = camera->get_global_transform();
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
undo_redo->create_action(TTR("Align Rotation with View"));
for (Node *E : selection) {
@ -4350,7 +4353,7 @@ void Node3DEditorViewport::focus_selection() {
Vector3 center;
int count = 0;
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *node : selection) {
Node3D *node_3d = Object::cast_to<Node3D>(node);
@ -4419,7 +4422,7 @@ Vector3 Node3DEditorViewport::_get_instance_position(const Point2 &p_pos, Node3D
HashSet<RID> rids;
if (!preview_node->is_inside_tree() && !ruler->is_inside_tree()) {
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
Node3D *first_selected_node = Object::cast_to<Node3D>(selection.front()->get());
@ -5028,7 +5031,7 @@ void Node3DEditorViewport::drop_data_fw(const Point2 &p_point, const Variant &p_
selected_files = d["files"];
}
List<Node *> selected_nodes = EditorNode::get_singleton()->get_editor_selection()->get_selected_node_list();
List<Node *> selected_nodes = EditorNode::get_singleton()->get_editor_selection()->get_top_selected_node_list();
Node *root_node = EditorNode::get_singleton()->get_edited_scene();
if (selected_nodes.size() > 0) {
Node *selected_node = selected_nodes.front()->get();
@ -5078,7 +5081,7 @@ void Node3DEditorViewport::commit_transform() {
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
undo_redo->create_action(_transform_name[_edit.mode]);
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *E : selection) {
Node3D *sp = Object::cast_to<Node3D>(E);
@ -5103,7 +5106,7 @@ void Node3DEditorViewport::commit_transform() {
void Node3DEditorViewport::apply_transform(Vector3 p_motion, double p_snap) {
bool local_coords = (spatial_editor->are_local_coords_enabled() && _edit.plane != TRANSFORM_VIEW);
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *E : selection) {
Node3D *sp = Object::cast_to<Node3D>(E);
if (!sp) {
@ -6297,7 +6300,7 @@ void Node3DEditor::update_transform_gizmo() {
count++;
}
} else {
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *E : selection) {
Node3D *sp = Object::cast_to<Node3D>(E);
if (!sp) {
@ -6766,7 +6769,7 @@ void Node3DEditor::_xform_dialog_action() {
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
undo_redo->create_action(TTR("XForm Dialog"));
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *E : selection) {
Node3D *sp = Object::cast_to<Node3D>(E);
@ -6979,7 +6982,7 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
case MENU_LOCK_SELECTED: {
undo_redo->create_action(TTR("Lock Selected"));
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *E : selection) {
Node3D *spatial = Object::cast_to<Node3D>(E);
@ -7000,7 +7003,7 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
case MENU_UNLOCK_SELECTED: {
undo_redo->create_action(TTR("Unlock Selected"));
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *E : selection) {
Node3D *spatial = Object::cast_to<Node3D>(E);
@ -7021,7 +7024,7 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
case MENU_GROUP_SELECTED: {
undo_redo->create_action(TTR("Group Selected"));
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *E : selection) {
Node3D *spatial = Object::cast_to<Node3D>(E);
@ -7041,7 +7044,7 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
} break;
case MENU_UNGROUP_SELECTED: {
undo_redo->create_action(TTR("Ungroup Selected"));
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
for (Node *E : selection) {
Node3D *spatial = Object::cast_to<Node3D>(E);
@ -7918,7 +7921,7 @@ void Node3DEditor::_selection_changed() {
continue;
}
if (sp == editor_selection->get_selected_node_list().back()->get()) {
if (sp == editor_selection->get_top_selected_node_list().back()->get()) {
RenderingServer::get_singleton()->instance_set_base(se->sbox_instance, active_selection_box->get_rid());
RenderingServer::get_singleton()->instance_set_base(se->sbox_instance_xray, active_selection_box_xray->get_rid());
RenderingServer::get_singleton()->instance_set_base(se->sbox_instance_offset, active_selection_box->get_rid());
@ -7931,7 +7934,7 @@ void Node3DEditor::_selection_changed() {
}
}
if (selected && editor_selection->get_selected_node_list().size() != 1) {
if (selected && editor_selection->get_top_selected_node_list().size() != 1) {
Vector<Ref<Node3DGizmo>> gizmos = selected->get_gizmos();
for (int i = 0; i < gizmos.size(); i++) {
Ref<EditorNode3DGizmo> seg = gizmos[i];
@ -7957,7 +7960,7 @@ void Node3DEditor::_refresh_menu_icons() {
bool all_grouped = true;
bool has_node3d_item = false;
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
if (selection.is_empty()) {
all_locked = false;
@ -8032,7 +8035,7 @@ void Node3DEditor::snap_selected_nodes_to_floor() {
}
void Node3DEditor::_snap_selected_nodes_to_floor() {
const List<Node *> &selection = editor_selection->get_selected_node_list();
const List<Node *> &selection = editor_selection->get_top_selected_node_list();
Dictionary snap_data;
for (Node *E : selection) {