mirror of
https://github.com/godotengine/godot.git
synced 2025-10-25 18:54:43 +00:00
Register the export info correctly when a global class script is used as the variable type for Node
This commit is contained in:
parent
0d11108a01
commit
653a8b113a
4 changed files with 38 additions and 10 deletions
|
|
@ -4315,39 +4315,55 @@ bool GDScriptParser::export_annotations(const AnnotationNode *p_annotation, Node
|
|||
return false;
|
||||
}
|
||||
break;
|
||||
case GDScriptParser::DataType::CLASS:
|
||||
case GDScriptParser::DataType::CLASS: {
|
||||
StringName class_name;
|
||||
if (export_type.class_type) {
|
||||
class_name = export_type.class_type->get_global_name();
|
||||
}
|
||||
if (class_name == StringName()) {
|
||||
push_error(R"(Script export type must be a global class.)", p_annotation);
|
||||
return false;
|
||||
}
|
||||
if (ClassDB::is_parent_class(export_type.native_type, SNAME("Resource"))) {
|
||||
variable->export_info.type = Variant::OBJECT;
|
||||
variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE;
|
||||
variable->export_info.hint_string = export_type.to_string();
|
||||
variable->export_info.hint_string = class_name;
|
||||
} else if (ClassDB::is_parent_class(export_type.native_type, SNAME("Node"))) {
|
||||
variable->export_info.type = Variant::OBJECT;
|
||||
variable->export_info.hint = PROPERTY_HINT_NODE_TYPE;
|
||||
variable->export_info.hint_string = export_type.to_string();
|
||||
variable->export_info.hint_string = class_name;
|
||||
} else {
|
||||
push_error(R"(Export type can only be built-in, a resource, a node, or an enum.)", p_annotation);
|
||||
return false;
|
||||
}
|
||||
} break;
|
||||
|
||||
break;
|
||||
case GDScriptParser::DataType::SCRIPT: {
|
||||
StringName class_name;
|
||||
StringName native_base;
|
||||
if (export_type.script_type.is_valid()) {
|
||||
class_name = export_type.script_type->get_language()->get_global_class_name(export_type.script_type->get_path());
|
||||
native_base = export_type.script_type->get_instance_base_type();
|
||||
class_name = export_type.script_type->get_global_name();
|
||||
}
|
||||
if (class_name == StringName()) {
|
||||
Ref<Script> script = ResourceLoader::load(export_type.script_path, SNAME("Script"));
|
||||
if (script.is_valid()) {
|
||||
class_name = script->get_language()->get_global_class_name(export_type.script_path);
|
||||
native_base = script->get_instance_base_type();
|
||||
class_name = script->get_global_name();
|
||||
}
|
||||
}
|
||||
if (class_name != StringName() && native_base != StringName() && ClassDB::is_parent_class(native_base, SNAME("Resource"))) {
|
||||
if (class_name == StringName()) {
|
||||
push_error(R"(Script export type must be a global class.)", p_annotation);
|
||||
return false;
|
||||
}
|
||||
if (ClassDB::is_parent_class(export_type.native_type, SNAME("Resource"))) {
|
||||
variable->export_info.type = Variant::OBJECT;
|
||||
variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE;
|
||||
variable->export_info.hint_string = class_name;
|
||||
} else if (ClassDB::is_parent_class(export_type.native_type, SNAME("Node"))) {
|
||||
variable->export_info.type = Variant::OBJECT;
|
||||
variable->export_info.hint = PROPERTY_HINT_NODE_TYPE;
|
||||
variable->export_info.hint_string = class_name;
|
||||
} else {
|
||||
push_error(R"(Export type can only be built-in, a resource, a node, or an enum.)", p_annotation);
|
||||
return false;
|
||||
}
|
||||
} break;
|
||||
case GDScriptParser::DataType::ENUM: {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue