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

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
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) {