Add GDScript resource export.

This commit is contained in:
willnationsdev 2022-04-24 23:33:18 -05:00
parent 4ab3fdcda0
commit 339aba1656
2 changed files with 83 additions and 30 deletions

View file

@ -3758,6 +3758,33 @@ bool GDScriptParser::export_annotations(const AnnotationNode *p_annotation, Node
return false;
}
break;
case GDScriptParser::DataType::CLASS:
// Can assume type is a global GDScript class.
if (!ClassDB::is_parent_class(export_type.native_type, SNAME("Resource"))) {
push_error(R"(Exported script type must extend Resource.)");
return false;
}
variable->export_info.type = Variant::OBJECT;
variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE;
variable->export_info.hint_string = export_type.class_type->identifier->name;
break;
case GDScriptParser::DataType::SCRIPT: {
StringName class_name;
if (export_type.script_type != nullptr && export_type.script_type.is_valid()) {
class_name = export_type.script_type->get_language()->get_global_class_name(export_type.script_type->get_path());
}
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);
}
}
if (class_name != StringName() && ClassDB::is_parent_class(ScriptServer::get_global_class_native_base(class_name), SNAME("Resource"))) {
variable->export_info.type = Variant::OBJECT;
variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE;
variable->export_info.hint_string = class_name;
}
} break;
case GDScriptParser::DataType::ENUM: {
variable->export_info.type = Variant::INT;
variable->export_info.hint = PROPERTY_HINT_ENUM;