diff options
author | Ryan <73148864+Ryan-000@users.noreply.github.com> | 2024-02-08 13:26:55 -0500 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-03-07 14:53:58 +0100 |
commit | 42ce14043e3ee9290acf5f57f712071cdc3a3e5b (patch) | |
tree | c86f40b61d6c014bd3f5911e61fa8794fe1b353c /core | |
parent | 24f775089efd1c3e7419a523dd74dc24924b517c (diff) | |
download | redot-engine-42ce14043e3ee9290acf5f57f712071cdc3a3e5b.tar.gz |
Expose scene unique id functionality in Resource
Diffstat (limited to 'core')
-rw-r--r-- | core/io/resource.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/core/io/resource.cpp b/core/io/resource.cpp index 7e8d0b43cd..6d32035d25 100644 --- a/core/io/resource.cpp +++ b/core/io/resource.cpp @@ -130,6 +130,16 @@ String Resource::generate_scene_unique_id() { } void Resource::set_scene_unique_id(const String &p_id) { + bool is_valid = true; + for (int i = 0; i < p_id.length(); i++) { + if (!is_ascii_identifier_char(p_id[i])) { + is_valid = false; + scene_unique_id = Resource::generate_scene_unique_id(); + break; + } + } + + ERR_FAIL_COND_MSG(!is_valid, "The scene unique ID must contain only letters, numbers, and underscores."); scene_unique_id = p_id; } @@ -532,6 +542,10 @@ void Resource::_bind_methods() { ClassDB::bind_method(D_METHOD("get_local_scene"), &Resource::get_local_scene); ClassDB::bind_method(D_METHOD("setup_local_to_scene"), &Resource::setup_local_to_scene); + ClassDB::bind_static_method("Resource", D_METHOD("generate_scene_unique_id"), &Resource::generate_scene_unique_id); + ClassDB::bind_method(D_METHOD("set_scene_unique_id", "id"), &Resource::set_scene_unique_id); + ClassDB::bind_method(D_METHOD("get_scene_unique_id"), &Resource::get_scene_unique_id); + ClassDB::bind_method(D_METHOD("emit_changed"), &Resource::emit_changed); ClassDB::bind_method(D_METHOD("duplicate", "subresources"), &Resource::duplicate, DEFVAL(false)); @@ -542,6 +556,7 @@ void Resource::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "resource_local_to_scene"), "set_local_to_scene", "is_local_to_scene"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "resource_path", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_path", "get_path"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "resource_name"), "set_name", "get_name"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "resource_scene_unique_id", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_scene_unique_id", "get_scene_unique_id"); MethodInfo get_rid_bind("_get_rid"); get_rid_bind.return_val.type = Variant::RID; |