@@ -1091,6 +1091,11 @@ struct _VariantCall {
10911091 static ConstantData *constant_data;
10921092
10931093 static void add_constant (int p_type, const StringName &p_constant_name, int64_t p_constant_value) {
1094+ #ifdef DEBUG_ENABLED
1095+ ERR_FAIL_COND (constant_data[p_type].value .has (p_constant_name));
1096+ ERR_FAIL_COND (enum_data[p_type].value .has (p_constant_name));
1097+ ERR_FAIL_COND (enum_data[p_type].value_to_enum .has (p_constant_name));
1098+ #endif
10941099 constant_data[p_type].value [p_constant_name] = p_constant_value;
10951100#ifdef DEBUG_ENABLED
10961101 constant_data[p_type].value_ordered .push_back (p_constant_name);
@@ -1106,12 +1111,19 @@ struct _VariantCall {
11061111
11071112 struct EnumData {
11081113 HashMap<StringName, HashMap<StringName, int >> value;
1114+ HashMap<StringName, StringName> value_to_enum;
11091115 };
11101116
11111117 static EnumData *enum_data;
11121118
11131119 static void add_enum_constant (int p_type, const StringName &p_enum_type_name, const StringName &p_enumeration_name, int p_enum_value) {
1120+ #ifdef DEBUG_ENABLED
1121+ ERR_FAIL_COND (constant_data[p_type].value .has (p_enumeration_name));
1122+ ERR_FAIL_COND (enum_data[p_type].value .has (p_enumeration_name));
1123+ ERR_FAIL_COND (enum_data[p_type].value_to_enum .has (p_enumeration_name));
1124+ #endif
11141125 enum_data[p_type].value [p_enum_type_name][p_enumeration_name] = p_enum_value;
1126+ enum_data[p_type].value_to_enum [p_enumeration_name] = p_enum_type_name;
11151127 }
11161128};
11171129
@@ -1561,6 +1573,23 @@ int Variant::get_enum_value(Variant::Type p_type, const StringName &p_enum_name,
15611573 return V->value ;
15621574}
15631575
1576+ bool Variant::has_enum (Variant::Type p_type, const StringName &p_enum_name) {
1577+ ERR_FAIL_INDEX_V (p_type, Variant::VARIANT_MAX, false );
1578+
1579+ _VariantCall::EnumData &enum_data = _VariantCall::enum_data[p_type];
1580+
1581+ return enum_data.value .has (p_enum_name);
1582+ }
1583+
1584+ StringName Variant::get_enum_for_enumeration (Variant::Type p_type, const StringName &p_enumeration) {
1585+ ERR_FAIL_INDEX_V (p_type, Variant::VARIANT_MAX, StringName ());
1586+
1587+ _VariantCall::EnumData &enum_data = _VariantCall::enum_data[p_type];
1588+
1589+ const StringName *enum_name = enum_data.value_to_enum .getptr (p_enumeration);
1590+ return (enum_name == nullptr ) ? StringName () : *enum_name;
1591+ }
1592+
15641593#ifdef DEBUG_METHODS_ENABLED
15651594#define bind_method (m_type, m_method, m_arg_names, m_default_args ) \
15661595 METHOD_CLASS (m_type, m_method, &m_type::m_method); \
@@ -2660,10 +2689,6 @@ static void _register_variant_builtin_constants() {
26602689 _VariantCall::add_variant_constant (Variant::COLOR, Color::get_named_color_name (i), Color::get_named_color (i));
26612690 }
26622691
2663- _VariantCall::add_constant (Variant::VECTOR3, " AXIS_X" , Vector3::AXIS_X);
2664- _VariantCall::add_constant (Variant::VECTOR3, " AXIS_Y" , Vector3::AXIS_Y);
2665- _VariantCall::add_constant (Variant::VECTOR3, " AXIS_Z" , Vector3::AXIS_Z);
2666-
26672692 _VariantCall::add_enum_constant (Variant::VECTOR3, " Axis" , " AXIS_X" , Vector3::AXIS_X);
26682693 _VariantCall::add_enum_constant (Variant::VECTOR3, " Axis" , " AXIS_Y" , Vector3::AXIS_Y);
26692694 _VariantCall::add_enum_constant (Variant::VECTOR3, " Axis" , " AXIS_Z" , Vector3::AXIS_Z);
@@ -2685,32 +2710,19 @@ static void _register_variant_builtin_constants() {
26852710 _VariantCall::add_variant_constant (Variant::VECTOR3, " MODEL_FRONT" , Vector3 (0 , 0 , 1 ));
26862711 _VariantCall::add_variant_constant (Variant::VECTOR3, " MODEL_REAR" , Vector3 (0 , 0 , -1 ));
26872712
2688- _VariantCall::add_constant (Variant::VECTOR4, " AXIS_X" , Vector4::AXIS_X);
2689- _VariantCall::add_constant (Variant::VECTOR4, " AXIS_Y" , Vector4::AXIS_Y);
2690- _VariantCall::add_constant (Variant::VECTOR4, " AXIS_Z" , Vector4::AXIS_Z);
2691- _VariantCall::add_constant (Variant::VECTOR4, " AXIS_W" , Vector4::AXIS_W);
2692-
26932713 _VariantCall::add_enum_constant (Variant::VECTOR4, " Axis" , " AXIS_X" , Vector4::AXIS_X);
26942714 _VariantCall::add_enum_constant (Variant::VECTOR4, " Axis" , " AXIS_Y" , Vector4::AXIS_Y);
26952715 _VariantCall::add_enum_constant (Variant::VECTOR4, " Axis" , " AXIS_Z" , Vector4::AXIS_Z);
26962716 _VariantCall::add_enum_constant (Variant::VECTOR4, " Axis" , " AXIS_W" , Vector4::AXIS_W);
2717+
26972718 _VariantCall::add_variant_constant (Variant::VECTOR4, " ZERO" , Vector4 (0 , 0 , 0 , 0 ));
26982719 _VariantCall::add_variant_constant (Variant::VECTOR4, " ONE" , Vector4 (1 , 1 , 1 , 1 ));
26992720 _VariantCall::add_variant_constant (Variant::VECTOR4, " INF" , Vector4 (INFINITY, INFINITY, INFINITY, INFINITY));
27002721
2701- _VariantCall::add_constant (Variant::VECTOR3I, " AXIS_X" , Vector3i::AXIS_X);
2702- _VariantCall::add_constant (Variant::VECTOR3I, " AXIS_Y" , Vector3i::AXIS_Y);
2703- _VariantCall::add_constant (Variant::VECTOR3I, " AXIS_Z" , Vector3i::AXIS_Z);
2704-
27052722 _VariantCall::add_enum_constant (Variant::VECTOR3I, " Axis" , " AXIS_X" , Vector3i::AXIS_X);
27062723 _VariantCall::add_enum_constant (Variant::VECTOR3I, " Axis" , " AXIS_Y" , Vector3i::AXIS_Y);
27072724 _VariantCall::add_enum_constant (Variant::VECTOR3I, " Axis" , " AXIS_Z" , Vector3i::AXIS_Z);
27082725
2709- _VariantCall::add_constant (Variant::VECTOR4I, " AXIS_X" , Vector4i::AXIS_X);
2710- _VariantCall::add_constant (Variant::VECTOR4I, " AXIS_Y" , Vector4i::AXIS_Y);
2711- _VariantCall::add_constant (Variant::VECTOR4I, " AXIS_Z" , Vector4i::AXIS_Z);
2712- _VariantCall::add_constant (Variant::VECTOR4I, " AXIS_W" , Vector4i::AXIS_W);
2713-
27142726 _VariantCall::add_enum_constant (Variant::VECTOR4I, " Axis" , " AXIS_X" , Vector4i::AXIS_X);
27152727 _VariantCall::add_enum_constant (Variant::VECTOR4I, " Axis" , " AXIS_Y" , Vector4i::AXIS_Y);
27162728 _VariantCall::add_enum_constant (Variant::VECTOR4I, " Axis" , " AXIS_Z" , Vector4i::AXIS_Z);
@@ -2732,15 +2744,9 @@ static void _register_variant_builtin_constants() {
27322744 _VariantCall::add_variant_constant (Variant::VECTOR3I, " FORWARD" , Vector3i (0 , 0 , -1 ));
27332745 _VariantCall::add_variant_constant (Variant::VECTOR3I, " BACK" , Vector3i (0 , 0 , 1 ));
27342746
2735- _VariantCall::add_constant (Variant::VECTOR2, " AXIS_X" , Vector2::AXIS_X);
2736- _VariantCall::add_constant (Variant::VECTOR2, " AXIS_Y" , Vector2::AXIS_Y);
2737-
27382747 _VariantCall::add_enum_constant (Variant::VECTOR2, " Axis" , " AXIS_X" , Vector2::AXIS_X);
27392748 _VariantCall::add_enum_constant (Variant::VECTOR2, " Axis" , " AXIS_Y" , Vector2::AXIS_Y);
27402749
2741- _VariantCall::add_constant (Variant::VECTOR2I, " AXIS_X" , Vector2i::AXIS_X);
2742- _VariantCall::add_constant (Variant::VECTOR2I, " AXIS_Y" , Vector2i::AXIS_Y);
2743-
27442750 _VariantCall::add_enum_constant (Variant::VECTOR2I, " Axis" , " AXIS_X" , Vector2i::AXIS_X);
27452751 _VariantCall::add_enum_constant (Variant::VECTOR2I, " Axis" , " AXIS_Y" , Vector2i::AXIS_Y);
27462752
@@ -2789,13 +2795,6 @@ static void _register_variant_builtin_constants() {
27892795
27902796 _VariantCall::add_variant_constant (Variant::QUATERNION, " IDENTITY" , Quaternion (0 , 0 , 0 , 1 ));
27912797
2792- _VariantCall::add_constant (Variant::PROJECTION, " PLANE_NEAR" , Projection::PLANE_NEAR);
2793- _VariantCall::add_constant (Variant::PROJECTION, " PLANE_FAR" , Projection::PLANE_FAR);
2794- _VariantCall::add_constant (Variant::PROJECTION, " PLANE_LEFT" , Projection::PLANE_LEFT);
2795- _VariantCall::add_constant (Variant::PROJECTION, " PLANE_TOP" , Projection::PLANE_TOP);
2796- _VariantCall::add_constant (Variant::PROJECTION, " PLANE_RIGHT" , Projection::PLANE_RIGHT);
2797- _VariantCall::add_constant (Variant::PROJECTION, " PLANE_BOTTOM" , Projection::PLANE_BOTTOM);
2798-
27992798 _VariantCall::add_enum_constant (Variant::PROJECTION, " Planes" , " PLANE_NEAR" , Projection::PLANE_NEAR);
28002799 _VariantCall::add_enum_constant (Variant::PROJECTION, " Planes" , " PLANE_FAR" , Projection::PLANE_FAR);
28012800 _VariantCall::add_enum_constant (Variant::PROJECTION, " Planes" , " PLANE_LEFT" , Projection::PLANE_LEFT);
0 commit comments