|
@@ -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;
|