|
@@ -44,16 +44,19 @@ namespace Godot.Bridge
|
|
internal static unsafe IntPtr CreateManagedForGodotObjectBinding(godot_string_name* nativeTypeName,
|
|
internal static unsafe IntPtr CreateManagedForGodotObjectBinding(godot_string_name* nativeTypeName,
|
|
IntPtr godotObject)
|
|
IntPtr godotObject)
|
|
{
|
|
{
|
|
|
|
+ // TODO: Optimize with source generators and delegate pointers
|
|
|
|
+
|
|
try
|
|
try
|
|
{
|
|
{
|
|
Type nativeType = TypeGetProxyClass(nativeTypeName);
|
|
Type nativeType = TypeGetProxyClass(nativeTypeName);
|
|
var obj = (Object)FormatterServices.GetUninitializedObject(nativeType);
|
|
var obj = (Object)FormatterServices.GetUninitializedObject(nativeType);
|
|
|
|
|
|
- obj.NativePtr = godotObject;
|
|
|
|
-
|
|
|
|
var ctor = nativeType.GetConstructor(
|
|
var ctor = nativeType.GetConstructor(
|
|
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
|
|
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
|
|
null, Type.EmptyTypes, null);
|
|
null, Type.EmptyTypes, null);
|
|
|
|
+
|
|
|
|
+ obj.NativePtr = godotObject;
|
|
|
|
+
|
|
_ = ctor!.Invoke(obj, null);
|
|
_ = ctor!.Invoke(obj, null);
|
|
|
|
|
|
return GCHandle.ToIntPtr(GCHandle.Alloc(obj));
|
|
return GCHandle.ToIntPtr(GCHandle.Alloc(obj));
|
|
@@ -70,14 +73,14 @@ namespace Godot.Bridge
|
|
IntPtr godotObject,
|
|
IntPtr godotObject,
|
|
godot_variant** args, int argCount)
|
|
godot_variant** args, int argCount)
|
|
{
|
|
{
|
|
|
|
+ // TODO: Optimize with source generators and delegate pointers
|
|
|
|
+
|
|
try
|
|
try
|
|
{
|
|
{
|
|
// Performance is not critical here as this will be replaced with source generators.
|
|
// Performance is not critical here as this will be replaced with source generators.
|
|
Type scriptType = _scriptBridgeMap[scriptPtr];
|
|
Type scriptType = _scriptBridgeMap[scriptPtr];
|
|
var obj = (Object)FormatterServices.GetUninitializedObject(scriptType);
|
|
var obj = (Object)FormatterServices.GetUninitializedObject(scriptType);
|
|
|
|
|
|
- obj.NativePtr = godotObject;
|
|
|
|
-
|
|
|
|
var ctor = scriptType
|
|
var ctor = scriptType
|
|
.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
|
|
.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
|
|
.Where(c => c.GetParameters().Length == argCount)
|
|
.Where(c => c.GetParameters().Length == argCount)
|
|
@@ -108,7 +111,11 @@ namespace Godot.Bridge
|
|
*args[i], parameters[i].ParameterType);
|
|
*args[i], parameters[i].ParameterType);
|
|
}
|
|
}
|
|
|
|
|
|
- ctor.Invoke(obj, invokeParams);
|
|
|
|
|
|
+ obj.NativePtr = godotObject;
|
|
|
|
+
|
|
|
|
+ _ = ctor.Invoke(obj, invokeParams);
|
|
|
|
+
|
|
|
|
+
|
|
return true.ToGodotBool();
|
|
return true.ToGodotBool();
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
catch (Exception e)
|