@@ -454,6 +454,8 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
454454 result .append ("" )
455455 result .append ("\t static struct _MethodBindings {" )
456456
457+ result .append (f'\t \t GDExtensionTypeFromVariantConstructorFunc from_variant_constructor;' )
458+
457459 if "constructors" in builtin_api :
458460 for constructor in builtin_api ["constructors" ]:
459461 result .append (f'\t \t GDExtensionPtrConstructor constructor_{ constructor ["index" ]} ;' )
@@ -494,6 +496,9 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
494496 result .append ("\t static void init_bindings();" )
495497 result .append ("\t static void _init_bindings_constructors_destructor();" )
496498
499+ result .append ("" )
500+ result .append (f"\t { class_name } (const Variant *p_variant);" )
501+
497502 result .append ("" )
498503 result .append ("public:" )
499504
@@ -818,6 +823,8 @@ def generate_builtin_class_source(builtin_api, size, used_classes, fully_used_cl
818823
819824 result .append (f"void { class_name } ::_init_bindings_constructors_destructor() {{" )
820825
826+ result .append (f'\t _method_bindings.from_variant_constructor = internal::gdextension_interface_get_variant_to_type_constructor({ enum_type_name } );' )
827+
821828 if "constructors" in builtin_api :
822829 for constructor in builtin_api ["constructors" ]:
823830 result .append (
@@ -899,6 +906,11 @@ def generate_builtin_class_source(builtin_api, size, used_classes, fully_used_cl
899906
900907 copy_constructor_index = - 1
901908
909+ result .append (f"{ class_name } ::{ class_name } (const Variant *p_variant) {{" )
910+ result .append ("\t _method_bindings.from_variant_constructor(&opaque, this->_native_ptr());" )
911+ result .append ("}" );
912+ result .append ("" );
913+
902914 if "constructors" in builtin_api :
903915 for constructor in builtin_api ["constructors" ]:
904916 method_signature = f"{ class_name } ::{ class_name } ("
0 commit comments