@@ -2078,6 +2078,7 @@ def generate_engine_class_source(class_api, used_classes, fully_used_classes, us
20782078 result = []
20792079
20802080 class_name = class_api ["name" ]
2081+ inherits = class_api ["inherits" ] if "inherits" in class_api else "Wrapped"
20812082 snake_class_name = camel_to_snake (class_name )
20822083 is_singleton = class_name in singletons
20832084
@@ -2117,27 +2118,37 @@ def generate_engine_class_source(class_api, used_classes, fully_used_classes, us
21172118 result .append ("#ifdef DEBUG_ENABLED" )
21182119 result .append ("\t \t ERR_FAIL_NULL_V(singleton_obj, nullptr);" )
21192120 result .append ("#endif // DEBUG_ENABLED" )
2121+ # This will lead to the constructor which will set `singleton`.
21202122 result .append (
2121- f"\t \t singleton = reinterpret_cast< { class_name } *>( ::godot::gdextension_interface::object_get_instance_binding(singleton_obj, ::godot::gdextension_interface::token, &{ class_name } ::_gde_binding_callbacks) );"
2123+ f"\t \t ::godot::gdextension_interface::object_get_instance_binding(singleton_obj, ::godot::gdextension_interface::token, &{ class_name } ::_gde_binding_callbacks);"
21222124 )
21232125 result .append ("#ifdef DEBUG_ENABLED" )
21242126 result .append ("\t \t ERR_FAIL_NULL_V(singleton, nullptr);" )
21252127 result .append ("#endif // DEBUG_ENABLED" )
2126- result .append ("\t \t if (likely(singleton)) {" )
2127- result .append (f"\t \t \t ClassDB::_register_engine_singleton({ class_name } ::get_class_static(), singleton);" )
2128- result .append ("\t \t }" )
21292128 result .append ("\t }" )
21302129 result .append ("\t return singleton;" )
21312130 result .append ("}" )
21322131 result .append ("" )
21332132
2133+ result .append (f"{ class_name } ::{ class_name } (GodotObject *p_godot_object) : { inherits } (p_godot_object) {{" )
2134+ result .append ("\t if (singleton == nullptr) {" )
2135+ result .append ("\t \t singleton = this;" )
2136+ result .append (f"\t \t ClassDB::_register_engine_singleton({ class_name } ::get_class_static(), singleton);" )
2137+ result .append ("\t }" )
2138+ result .append ("}" )
2139+ result .append ("" )
2140+
21342141 result .append (f"{ class_name } ::~{ class_name } () {{" )
21352142 result .append ("\t if (singleton == this) {" )
21362143 result .append (f"\t \t ClassDB::_unregister_engine_singleton({ class_name } ::get_class_static());" )
21372144 result .append ("\t \t singleton = nullptr;" )
21382145 result .append ("\t }" )
21392146 result .append ("}" )
21402147 result .append ("" )
2148+ else :
2149+ result .append (f"{ class_name } ::{ class_name } (GodotObject *p_godot_object) : { inherits } (p_godot_object) {{" )
2150+ result .append ("}" )
2151+ result .append ("" )
21412152
21422153 if "methods" in class_api :
21432154 for method in class_api ["methods" ]:
0 commit comments