|
@@ -2124,6 +2124,56 @@ void PackedScene::recreate_state() {
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
+#ifdef TOOLS_ENABLED
|
|
|
+HashSet<StringName> PackedScene::get_scene_groups(const String &p_path) {
|
|
|
+ {
|
|
|
+ Ref<PackedScene> packed_scene = ResourceCache::get_ref(p_path);
|
|
|
+ if (packed_scene.is_valid()) {
|
|
|
+ return packed_scene->get_state()->get_all_groups();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (p_path.get_extension() == "tscn") {
|
|
|
+ Ref<FileAccess> scene_file = FileAccess::open(p_path, FileAccess::READ);
|
|
|
+ ERR_FAIL_COND_V(scene_file.is_null(), HashSet<StringName>());
|
|
|
+
|
|
|
+ HashSet<StringName> ret;
|
|
|
+ while (!scene_file->eof_reached()) {
|
|
|
+ const String line = scene_file->get_line();
|
|
|
+ if (!line.begins_with("[node")) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ int i = line.find("groups=[");
|
|
|
+ if (i == -1) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ int j = line.find_char(']', i);
|
|
|
+ while (i < j) {
|
|
|
+ i = line.find_char('"', i);
|
|
|
+ if (i == -1) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ int k = line.find_char('"', i + 1);
|
|
|
+ if (k == -1) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret.insert(line.substr(i + 1, k - i - 1));
|
|
|
+ i = k + 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+ } else {
|
|
|
+ Ref<PackedScene> packed_scene = ResourceLoader::load(p_path);
|
|
|
+ ERR_FAIL_COND_V(packed_scene.is_null(), HashSet<StringName>());
|
|
|
+ return packed_scene->get_state()->get_all_groups();
|
|
|
+ }
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
Ref<SceneState> PackedScene::get_state() const {
|
|
|
return state;
|
|
|
}
|