diff options
author | George Marques <george@gmarqu.es> | 2021-03-17 14:58:05 -0300 |
---|---|---|
committer | George Marques <george@gmarqu.es> | 2021-03-30 08:29:38 -0300 |
commit | 160c26049566a8f392420d459d8a738e8e3b753d (patch) | |
tree | 27394e44ac5ca7c1c2a6df4f3b2dea7fce9f275e /modules/gdscript/gdscript_parser.cpp | |
parent | 3e4ecd9669f1d84689eff48282191d176175d0a5 (diff) | |
download | redot-engine-160c26049566a8f392420d459d8a738e8e3b753d.tar.gz |
GDScript: Allow export of enum variables
Also fix the enum type in variables to be integer.
Diffstat (limited to 'modules/gdscript/gdscript_parser.cpp')
-rw-r--r-- | modules/gdscript/gdscript_parser.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
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<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 { |