internal static unsafe void SignalCallback(IntPtr awaiterGCHandlePtr, godot_variant **args, int argCount, godot_bool *outAwaiterIsNull) { try { var awaiter = (SignalAwaiter)GCHandle.FromIntPtr(awaiterGCHandlePtr).Target; if (awaiter == null) { *outAwaiterIsNull = godot_bool.True; return; } *outAwaiterIsNull = godot_bool.False; awaiter._completed = true; Variant[] signalArgs = new Variant[argCount]; for (int i = 0; i < argCount; i++) { signalArgs[i] = Variant.CreateCopyingBorrowed(*args[i]); } awaiter._result = signalArgs; awaiter._continuation?.Invoke(); } catch (Exception e) { ExceptionUtils.LogException(e); *outAwaiterIsNull = godot_bool.False; } }
internal static unsafe void CallToString(IntPtr godotObjectGCHandle, godot_string *outRes, godot_bool *outValid) { try { var self = (Object)GCHandle.FromIntPtr(godotObjectGCHandle).Target; if (self == null) { *outRes = default; *outValid = godot_bool.False; return; } var resultStr = self.ToString(); if (resultStr == null) { *outRes = default; *outValid = godot_bool.False; return; } *outRes = Marshaling.ConvertStringToNative(resultStr); *outValid = godot_bool.True; } catch (Exception e) { ExceptionUtils.LogException(e); *outRes = default; *outValid = godot_bool.False; } }