summaryrefslogtreecommitdiffstats
path: root/modules/gdscript/gdscript_parser.cpp
diff options
context:
space:
mode:
authorGeorge Marques <george@gmarqu.es>2021-03-17 14:58:05 -0300
committerGeorge Marques <george@gmarqu.es>2021-03-30 08:29:38 -0300
commit160c26049566a8f392420d459d8a738e8e3b753d (patch)
tree27394e44ac5ca7c1c2a6df4f3b2dea7fce9f275e /modules/gdscript/gdscript_parser.cpp
parent3e4ecd9669f1d84689eff48282191d176175d0a5 (diff)
downloadredot-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.cpp21
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 {