mirror of
https://github.com/godotengine/godot.git
synced 2025-12-07 22:00:10 +00:00
Enforce that custom nodes keep their original type
Enforce that custom nodes and resources created via the "Create New Node" dialog, should permanently retain their original type (script). This means: - Type continuity: It should be impossible for the user to (accidentally) clear the original script of a custom node that was created via the "Create New Node" dialog. - Extensibility: The user should be able to extend custom types as usual (create a script that inherits the original type and replace the original script of that node with his own). However, if he then clears his extension-script from that node later on, the custom type should revert to its original script instead of becoming a non-scripted type.
This commit is contained in:
parent
db66bd35af
commit
06998a3927
10 changed files with 147 additions and 25 deletions
|
|
@ -547,6 +547,7 @@ Variant EditorData::instantiate_custom_type(const String &p_type, const String &
|
|||
if (n) {
|
||||
n->set_name(p_type);
|
||||
}
|
||||
n->set_meta(SceneStringName(_custom_type_script), script);
|
||||
((Object *)ob)->set_script(script);
|
||||
return ob;
|
||||
}
|
||||
|
|
@ -1008,6 +1009,7 @@ Variant EditorData::script_class_instance(const String &p_class) {
|
|||
// Store in a variant to initialize the refcount if needed.
|
||||
Variant obj = ClassDB::instantiate(script->get_instance_base_type());
|
||||
if (obj) {
|
||||
Object::cast_to<Object>(obj)->set_meta(SceneStringName(_custom_type_script), script);
|
||||
obj.operator Object *()->set_script(script);
|
||||
}
|
||||
return obj;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue