GDScript: Allow export of enum variables
Also fix the enum type in variables to be integer.
This commit is contained in:
parent
3e4ecd9669
commit
160c260495
@ -137,16 +137,12 @@ GDScriptDataType GDScriptCompiler::_gdtype_from_datatype(const GDScriptParser::D
|
||||
}
|
||||
}
|
||||
} break;
|
||||
case GDScriptParser::DataType::ENUM:
|
||||
case GDScriptParser::DataType::ENUM_VALUE:
|
||||
result.has_type = true;
|
||||
result.kind = GDScriptDataType::BUILTIN;
|
||||
result.builtin_type = Variant::INT;
|
||||
break;
|
||||
case GDScriptParser::DataType::ENUM:
|
||||
result.has_type = true;
|
||||
result.kind = GDScriptDataType::BUILTIN;
|
||||
result.builtin_type = Variant::DICTIONARY;
|
||||
break;
|
||||
case GDScriptParser::DataType::UNRESOLVED: {
|
||||
ERR_PRINT("Parser bug: converting unresolved type.");
|
||||
return GDScriptDataType();
|
||||
@ -2218,9 +2214,8 @@ Error GDScriptCompiler::_parse_class_level(GDScript *p_script, const GDScriptPar
|
||||
prop_info.hint = export_info.hint;
|
||||
prop_info.hint_string = export_info.hint_string;
|
||||
prop_info.usage = export_info.usage;
|
||||
} else {
|
||||
prop_info.usage = PROPERTY_USAGE_SCRIPT_VARIABLE;
|
||||
}
|
||||
prop_info.usage |= PROPERTY_USAGE_SCRIPT_VARIABLE;
|
||||
#ifdef TOOLS_ENABLED
|
||||
p_script->doc_variables[name] = variable->doc_description;
|
||||
#endif
|
||||
|
@ -3249,12 +3249,29 @@ bool GDScriptParser::export_annotations(const AnnotationNode *p_annotation, Node
|
||||
variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE;
|
||||
variable->export_info.hint_string = get_real_class_name(export_type.native_type);
|
||||
} else {
|
||||
push_error(R"(Export type can only be built-in or a resource.)", variable);
|
||||
push_error(R"(Export type can only be built-in, a resource, or an enum.)", variable);
|
||||
}
|
||||
break;
|
||||
case GDScriptParser::DataType::ENUM: {
|
||||
variable->export_info.type = Variant::INT;
|
||||
variable->export_info.hint = PROPERTY_HINT_ENUM;
|
||||
|
||||
String enum_hint_string;
|
||||
for (const Map<StringName, int>::Element *E = export_type.enum_values.front(); E; E = E->next()) {
|
||||
enum_hint_string += E->key().operator String().camelcase_to_underscore(true).capitalize().xml_escape();
|
||||
enum_hint_string += ":";
|
||||
enum_hint_string += String::num_int64(E->get()).xml_escape();
|
||||
|
||||
if (E->next()) {
|
||||
enum_hint_string += ",";
|
||||
}
|
||||
}
|
||||
|
||||
variable->export_info.hint_string = enum_hint_string;
|
||||
} break;
|
||||
default:
|
||||
// TODO: Allow custom user resources.
|
||||
push_error(R"(Export type can only be built-in or a resource.)", variable);
|
||||
push_error(R"(Export type can only be built-in, a resource, or an enum.)", variable);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
|
@ -132,7 +132,7 @@ public:
|
||||
ClassNode *class_type = nullptr;
|
||||
|
||||
MethodInfo method_info; // For callable/signals.
|
||||
HashMap<StringName, int> enum_values; // For enums.
|
||||
Map<StringName, int> enum_values; // For enums.
|
||||
|
||||
_FORCE_INLINE_ bool is_set() const { return kind != UNRESOLVED; }
|
||||
_FORCE_INLINE_ bool has_no_type() const { return type_source == UNDETECTED; }
|
||||
|
Loading…
Reference in New Issue
Block a user