示例#1
0
        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;
            }
        }
示例#2
0
        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;
            }
        }