From 160c26049566a8f392420d459d8a738e8e3b753d Mon Sep 17 00:00:00 2001 From: George Marques Date: Wed, 17 Mar 2021 14:58:05 -0300 Subject: GDScript: Allow export of enum variables Also fix the enum type in variables to be integer. --- modules/gdscript/gdscript_parser.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'modules/gdscript/gdscript_parser.cpp') diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 1667aa73bd..3bdbdcddcd 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -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::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 { -- cgit v1.2.3