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();