diff --git a/doc/classes/EditorInterface.xml b/doc/classes/EditorInterface.xml index d4acb820232..0a178178b3d 100644 --- a/doc/classes/EditorInterface.xml +++ b/doc/classes/EditorInterface.xml @@ -156,10 +156,16 @@ [b]Warning:[/b] Removing and freeing this node will render a part of the editor useless and may cause a crash. + + + + Returns an array with references to the root nodes of the currently opened scenes. + + - Returns an [Array] with the file paths of the currently opened scenes. + Returns an array with the file paths of the currently opened scenes. diff --git a/editor/editor_interface.cpp b/editor/editor_interface.cpp index c0d7b1b1fa7..587e3c12ec2 100644 --- a/editor/editor_interface.cpp +++ b/editor/editor_interface.cpp @@ -667,12 +667,24 @@ PackedStringArray EditorInterface::get_open_scenes() const { PackedStringArray ret; Vector scenes = EditorNode::get_editor_data().get_edited_scenes(); - int scns_amount = scenes.size(); - for (int idx_scn = 0; idx_scn < scns_amount; idx_scn++) { - if (scenes[idx_scn].root == nullptr) { + for (EditorData::EditedScene &edited_scene : scenes) { + if (edited_scene.root == nullptr) { continue; } - ret.push_back(scenes[idx_scn].root->get_scene_file_path()); + ret.push_back(edited_scene.root->get_scene_file_path()); + } + return ret; +} + +TypedArray EditorInterface::get_open_scene_roots() const { + TypedArray ret; + Vector scenes = EditorNode::get_editor_data().get_edited_scenes(); + + for (EditorData::EditedScene &edited_scene : scenes) { + if (edited_scene.root == nullptr) { + continue; + } + ret.push_back(edited_scene.root); } return ret; } @@ -830,6 +842,7 @@ void EditorInterface::_bind_methods() { ClassDB::bind_method(D_METHOD("reload_scene_from_path", "scene_filepath"), &EditorInterface::reload_scene_from_path); ClassDB::bind_method(D_METHOD("get_open_scenes"), &EditorInterface::get_open_scenes); + ClassDB::bind_method(D_METHOD("get_open_scene_roots"), &EditorInterface::get_open_scene_roots); ClassDB::bind_method(D_METHOD("get_edited_scene_root"), &EditorInterface::get_edited_scene_root); ClassDB::bind_method(D_METHOD("save_scene"), &EditorInterface::save_scene); diff --git a/editor/editor_interface.h b/editor/editor_interface.h index 44a5ed168d3..228410748b0 100644 --- a/editor/editor_interface.h +++ b/editor/editor_interface.h @@ -170,6 +170,7 @@ public: void reload_scene_from_path(const String &scene_path); PackedStringArray get_open_scenes() const; + TypedArray get_open_scene_roots() const; Node *get_edited_scene_root() const; Error save_scene();