diff --git a/.gitmodules b/.gitmodules index 58e2622..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +0,0 @@ -[submodule "addons/FracturalCommons"] - path = addons/FracturalCommons - url = https://github.com/Fractural/FracturalCommons.git - branch = release diff --git a/addons/FracturalCommons b/addons/FracturalCommons deleted file mode 160000 index ba68b15..0000000 --- a/addons/FracturalCommons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ba68b154508ff4239fd864ceb6c81bb899e44936 diff --git a/addons/GDTask/CompilerServices/AsyncGDTaskMethodBuilder.cs b/addons/GDTask/CompilerServices/AsyncGDTaskMethodBuilder.cs index 0ee9eb7..482857c 100644 --- a/addons/GDTask/CompilerServices/AsyncGDTaskMethodBuilder.cs +++ b/addons/GDTask/CompilerServices/AsyncGDTaskMethodBuilder.cs @@ -115,7 +115,7 @@ public void SetStateMachine(IAsyncStateMachine stateMachine) // don't use boxed stateMachine. } -#if DEBUG || !UNITY_2018_3_OR_NEWER +#if DEBUG // Important for IDE debugger. object debuggingId; private object ObjectIdForDebugger @@ -246,7 +246,7 @@ public void SetStateMachine(IAsyncStateMachine stateMachine) // don't use boxed stateMachine. } -#if DEBUG || !UNITY_2018_3_OR_NEWER +#if DEBUG // Important for IDE debugger. object debuggingId; private object ObjectIdForDebugger diff --git a/addons/GDTask/CompilerServices/AsyncGDTaskVoidMethodBuilder.cs b/addons/GDTask/CompilerServices/AsyncGDTaskVoidMethodBuilder.cs index cc4d522..83d57fa 100644 --- a/addons/GDTask/CompilerServices/AsyncGDTaskVoidMethodBuilder.cs +++ b/addons/GDTask/CompilerServices/AsyncGDTaskVoidMethodBuilder.cs @@ -115,7 +115,7 @@ public void SetStateMachine(IAsyncStateMachine stateMachine) // don't use boxed stateMachine. } -#if DEBUG || !UNITY_2018_3_OR_NEWER +#if DEBUG // Important for IDE debugger. object debuggingId; private object ObjectIdForDebugger diff --git a/addons/GDTask/CompilerServices/StateMachineRunner.cs b/addons/GDTask/CompilerServices/StateMachineRunner.cs index 7893b3e..1361195 100644 --- a/addons/GDTask/CompilerServices/StateMachineRunner.cs +++ b/addons/GDTask/CompilerServices/StateMachineRunner.cs @@ -7,18 +7,12 @@ namespace Fractural.Tasks.CompilerServices { - // #ENABLE_IL2CPP in this file is to avoid bug of IL2CPP VM. - // Issue is tracked on https://issuetracker.unity3d.com/issues/il2cpp-incorrect-results-when-calling-a-method-from-outside-class-in-a-struct - // but currently it is labeled `Won't Fix`. - internal interface IStateMachineRunner { Action MoveNext { get; } void Return(); -#if ENABLE_IL2CPP Action ReturnAction { get; } -#endif } internal interface IStateMachineRunnerPromise : IGDTaskSource @@ -53,9 +47,7 @@ internal sealed class AsyncGDTaskVoid : IStateMachineRunner, ITas { static TaskPool> pool; -#if ENABLE_IL2CPP public Action ReturnAction { get; } -#endif TStateMachine stateMachine; @@ -308,7 +300,6 @@ bool TryReturn() [MethodImpl(MethodImplOptions.AggressiveInlining)] void Run() { - // UnityEngine.Debug.Log($"MoveNext State:" + StateMachineUtility.GetState(stateMachine)); stateMachine.MoveNext(); } diff --git a/addons/GDTask/GDTask.Factory.cs b/addons/GDTask/GDTask.Factory.cs index 0c8d538..560ec69 100644 --- a/addons/GDTask/GDTask.Factory.cs +++ b/addons/GDTask/GDTask.Factory.cs @@ -135,28 +135,6 @@ public static Action Action(Func asyncAction, Can return () => asyncAction(cancellationToken).Forget(); } -#if UNITY_2018_3_OR_NEWER - - /// - /// Create async void(GDTaskVoid) UnityAction. - /// For exampe: onClick.AddListener(GDTask.UnityAction(async () => { /* */ } )) - /// - public static UnityEngine.Events.UnityAction UnityAction(Func asyncAction) - { - return () => asyncAction().Forget(); - } - - /// - /// Create async void(GDTaskVoid) UnityAction. - /// For exampe: onClick.AddListener(GDTask.UnityAction(FooAsync, this.GetCancellationTokenOnDestroy())) - /// - public static UnityEngine.Events.UnityAction UnityAction(Func asyncAction, CancellationToken cancellationToken) - { - return () => asyncAction(cancellationToken).Forget(); - } - -#endif - /// /// Defer the task creation just before call await. /// diff --git a/addons/GDTask/GDTask.Threading.cs b/addons/GDTask/GDTask.Threading.cs index 0808eb2..e3162fd 100644 --- a/addons/GDTask/GDTask.Threading.cs +++ b/addons/GDTask/GDTask.Threading.cs @@ -8,14 +8,13 @@ namespace Fractural.Tasks { public partial struct GDTask { -#if UNITY_2018_3_OR_NEWER /// /// If running on mainthread, do nothing. Otherwise, same as GDTask.Yield(PlayerLoopTiming.Update). /// public static SwitchToMainThreadAwaitable SwitchToMainThread(CancellationToken cancellationToken = default) { - return new SwitchToMainThreadAwaitable(PlayerLoopTiming.Update, cancellationToken); + return new SwitchToMainThreadAwaitable(PlayerLoopTiming.Process, cancellationToken); } /// @@ -31,7 +30,7 @@ public static SwitchToMainThreadAwaitable SwitchToMainThread(PlayerLoopTiming ti /// public static ReturnToMainThread ReturnToMainThread(CancellationToken cancellationToken = default) { - return new ReturnToMainThread(PlayerLoopTiming.Update, cancellationToken); + return new ReturnToMainThread(PlayerLoopTiming.Process, cancellationToken); } /// @@ -45,12 +44,11 @@ public static ReturnToMainThread ReturnToMainThread(PlayerLoopTiming timing, Can /// /// Queue the action to PlayerLoop. /// - public static void Post(Action action, PlayerLoopTiming timing = PlayerLoopTiming.Update) + public static void Post(Action action, PlayerLoopTiming timing = PlayerLoopTiming.Process) { - PlayerLoopHelper.AddContinuation(timing, action); + GDTaskPlayerLoopAutoload.AddContinuation(timing, action); } -#endif public static SwitchToThreadPoolAwaitable SwitchToThreadPool() { @@ -82,8 +80,6 @@ public static ReturnToSynchronizationContext ReturnToCurrentSynchronizationConte } } -#if UNITY_2018_3_OR_NEWER - public struct SwitchToMainThreadAwaitable { readonly PlayerLoopTiming playerLoopTiming; @@ -113,7 +109,7 @@ public bool IsCompleted get { var currentThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId; - if (PlayerLoopHelper.MainThreadId == currentThreadId) + if (GDTaskPlayerLoopAutoload.MainThreadId == currentThreadId) { return true; // run immediate. } @@ -128,12 +124,12 @@ public bool IsCompleted public void OnCompleted(Action continuation) { - PlayerLoopHelper.AddContinuation(playerLoopTiming, continuation); + GDTaskPlayerLoopAutoload.AddContinuation(playerLoopTiming, continuation); } public void UnsafeOnCompleted(Action continuation) { - PlayerLoopHelper.AddContinuation(playerLoopTiming, continuation); + GDTaskPlayerLoopAutoload.AddContinuation(playerLoopTiming, continuation); } } } @@ -167,23 +163,22 @@ public Awaiter(PlayerLoopTiming timing, CancellationToken cancellationToken) public Awaiter GetAwaiter() => this; - public bool IsCompleted => PlayerLoopHelper.MainThreadId == System.Threading.Thread.CurrentThread.ManagedThreadId; + public bool IsCompleted => GDTaskPlayerLoopAutoload.MainThreadId == System.Threading.Thread.CurrentThread.ManagedThreadId; public void GetResult() { cancellationToken.ThrowIfCancellationRequested(); } public void OnCompleted(Action continuation) { - PlayerLoopHelper.AddContinuation(timing, continuation); + GDTaskPlayerLoopAutoload.AddContinuation(timing, continuation); } public void UnsafeOnCompleted(Action continuation) { - PlayerLoopHelper.AddContinuation(timing, continuation); + GDTaskPlayerLoopAutoload.AddContinuation(timing, continuation); } } } -#endif public struct SwitchToThreadPoolAwaitable { @@ -203,11 +198,7 @@ public void OnCompleted(Action continuation) public void UnsafeOnCompleted(Action continuation) { -#if NETCOREAPP3_1 - ThreadPool.UnsafeQueueUserWorkItem(ThreadPoolWorkItem.Create(continuation), false); -#else ThreadPool.UnsafeQueueUserWorkItem(switchToCallback, continuation); -#endif } static void Callback(object state) @@ -216,48 +207,6 @@ static void Callback(object state) continuation(); } } - -#if NETCOREAPP3_1 - - sealed class ThreadPoolWorkItem : IThreadPoolWorkItem, ITaskPoolNode - { - static TaskPool pool; - ThreadPoolWorkItem nextNode; - public ref ThreadPoolWorkItem NextNode => ref nextNode; - - static ThreadPoolWorkItem() - { - TaskPool.RegisterSizeGetter(typeof(ThreadPoolWorkItem), () => pool.Size); - } - - Action continuation; - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ThreadPoolWorkItem Create(Action continuation) - { - if (!pool.TryPop(out var item)) - { - item = new ThreadPoolWorkItem(); - } - - item.continuation = continuation; - return item; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Execute() - { - var call = continuation; - continuation = null; - if (call != null) - { - pool.TryPush(this); - call.Invoke(); - } - } - } - -#endif } public struct SwitchToTaskPoolAwaitable diff --git a/addons/GDTask/GDTask.WhenAll.Generated.cs b/addons/GDTask/GDTask.WhenAll.Generated.cs index 547ed95..c1e6faa 100644 --- a/addons/GDTask/GDTask.WhenAll.Generated.cs +++ b/addons/GDTask/GDTask.WhenAll.Generated.cs @@ -1,5 +1,4 @@ -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member -using System; +using System; using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using System.Threading; diff --git a/addons/GDTask/GDTask.WhenAny.Generated.cs b/addons/GDTask/GDTask.WhenAny.Generated.cs index ca3d7ea..352a7c5 100644 --- a/addons/GDTask/GDTask.WhenAny.Generated.cs +++ b/addons/GDTask/GDTask.WhenAny.Generated.cs @@ -1,5 +1,4 @@ -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member -using System; +using System; using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using System.Threading; diff --git a/addons/GDTask/GDTaskExtensions.Shorthand.cs b/addons/GDTask/GDTaskExtensions.Shorthand.cs index a681361..5edd98f 100644 --- a/addons/GDTask/GDTaskExtensions.Shorthand.cs +++ b/addons/GDTask/GDTaskExtensions.Shorthand.cs @@ -1,5 +1,4 @@ -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member -using System.Collections.Generic; +using System.Collections.Generic; namespace Fractural.Tasks { diff --git a/addons/GDTask/GDTaskExtensions.cs b/addons/GDTask/GDTaskExtensions.cs index 877fe33..3e56da1 100644 --- a/addons/GDTask/GDTaskExtensions.cs +++ b/addons/GDTask/GDTaskExtensions.cs @@ -355,19 +355,7 @@ public GDTaskStatus UnsafeGetStatus() } } -#if UNITY_2018_3_OR_NEWER - - public static IEnumerator ToCoroutine(this GDTask task, Action resultHandler = null, Action exceptionHandler = null) - { - return new ToCoroutineEnumerator(task, resultHandler, exceptionHandler); - } - - public static IEnumerator ToCoroutine(this GDTask task, Action exceptionHandler = null) - { - return new ToCoroutineEnumerator(task, exceptionHandler); - } - - public static async GDTask Timeout(this GDTask task, TimeSpan timeout, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming timeoutCheckTiming = PlayerLoopTiming.Update, CancellationTokenSource taskCancellationTokenSource = null) + public static async GDTask Timeout(this GDTask task, TimeSpan timeout, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming timeoutCheckTiming = PlayerLoopTiming.Process, CancellationTokenSource taskCancellationTokenSource = null) { var delayCancellationTokenSource = new CancellationTokenSource(); var timeoutTask = GDTask.Delay(timeout, delayType, timeoutCheckTiming, delayCancellationTokenSource.Token).SuppressCancellationThrow(); @@ -408,7 +396,7 @@ public static async GDTask Timeout(this GDTask task, TimeSpan timeout, DelayType } } - public static async GDTask Timeout(this GDTask task, TimeSpan timeout, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming timeoutCheckTiming = PlayerLoopTiming.Update, CancellationTokenSource taskCancellationTokenSource = null) + public static async GDTask Timeout(this GDTask task, TimeSpan timeout, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming timeoutCheckTiming = PlayerLoopTiming.Process, CancellationTokenSource taskCancellationTokenSource = null) { var delayCancellationTokenSource = new CancellationTokenSource(); var timeoutTask = GDTask.Delay(timeout, delayType, timeoutCheckTiming, delayCancellationTokenSource.Token).SuppressCancellationThrow(); @@ -454,7 +442,7 @@ public static async GDTask Timeout(this GDTask task, TimeSpan timeout, /// /// Timeout with suppress OperationCanceledException. Returns (bool, IsCacneled). /// - public static async GDTask TimeoutWithoutException(this GDTask task, TimeSpan timeout, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming timeoutCheckTiming = PlayerLoopTiming.Update, CancellationTokenSource taskCancellationTokenSource = null) + public static async GDTask TimeoutWithoutException(this GDTask task, TimeSpan timeout, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming timeoutCheckTiming = PlayerLoopTiming.Process, CancellationTokenSource taskCancellationTokenSource = null) { var delayCancellationTokenSource = new CancellationTokenSource(); var timeoutTask = GDTask.Delay(timeout, delayType, timeoutCheckTiming, delayCancellationTokenSource.Token).SuppressCancellationThrow(); @@ -500,7 +488,7 @@ public static async GDTask TimeoutWithoutException(this GDTask task, TimeS /// /// Timeout with suppress OperationCanceledException. Returns (bool IsTimeout, T Result). /// - public static async GDTask<(bool IsTimeout, T Result)> TimeoutWithoutException(this GDTask task, TimeSpan timeout, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming timeoutCheckTiming = PlayerLoopTiming.Update, CancellationTokenSource taskCancellationTokenSource = null) + public static async GDTask<(bool IsTimeout, T Result)> TimeoutWithoutException(this GDTask task, TimeSpan timeout, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming timeoutCheckTiming = PlayerLoopTiming.Process, CancellationTokenSource taskCancellationTokenSource = null) { var delayCancellationTokenSource = new CancellationTokenSource(); var timeoutTask = GDTask.Delay(timeout, delayType, timeoutCheckTiming, delayCancellationTokenSource.Token).SuppressCancellationThrow(); @@ -543,8 +531,6 @@ public static async GDTask TimeoutWithoutException(this GDTask task, TimeS return (false, taskResult.Result); } -#endif - public static void Forget(this GDTask task) { var awaiter = task.GetAwaiter(); @@ -602,9 +588,7 @@ static async GDTaskVoid ForgetCoreWithCatch(GDTask task, Action excep { if (handleExceptionOnMainThread) { -#if UNITY_2018_3_OR_NEWER await GDTask.SwitchToMainThread(); -#endif } exceptionHandler(ex); } @@ -672,9 +656,7 @@ static async GDTaskVoid ForgetCoreWithCatch(GDTask task, Action { if (handleExceptionOnMainThread) { -#if UNITY_2018_3_OR_NEWER await GDTask.SwitchToMainThread(); -#endif } exceptionHandler(ex); } @@ -778,142 +760,6 @@ public static async GDTask Unwrap(this GDTask task, bool continueOnCapture { await (await task).ConfigureAwait(continueOnCapturedContext); } - -#if UNITY_2018_3_OR_NEWER - - sealed class ToCoroutineEnumerator : IEnumerator - { - bool completed; - GDTask task; - Action exceptionHandler = null; - bool isStarted = false; - ExceptionDispatchInfo exception; - - public ToCoroutineEnumerator(GDTask task, Action exceptionHandler) - { - completed = false; - this.exceptionHandler = exceptionHandler; - this.task = task; - } - - async GDTaskVoid RunTask(GDTask task) - { - try - { - await task; - } - catch (Exception ex) - { - if (exceptionHandler != null) - { - exceptionHandler(ex); - } - else - { - this.exception = ExceptionDispatchInfo.Capture(ex); - } - } - finally - { - completed = true; - } - } - - public object Current => null; - - public bool MoveNext() - { - if (!isStarted) - { - isStarted = true; - RunTask(task).Forget(); - } - - if (exception != null) - { - exception.Throw(); - return false; - } - - return !completed; - } - - void IEnumerator.Reset() - { - } - } - - sealed class ToCoroutineEnumerator : IEnumerator - { - bool completed; - Action resultHandler = null; - Action exceptionHandler = null; - bool isStarted = false; - GDTask task; - object current = null; - ExceptionDispatchInfo exception; - - public ToCoroutineEnumerator(GDTask task, Action resultHandler, Action exceptionHandler) - { - completed = false; - this.task = task; - this.resultHandler = resultHandler; - this.exceptionHandler = exceptionHandler; - } - - async GDTaskVoid RunTask(GDTask task) - { - try - { - var value = await task; - current = value; // boxed if T is struct... - if (resultHandler != null) - { - resultHandler(value); - } - } - catch (Exception ex) - { - if (exceptionHandler != null) - { - exceptionHandler(ex); - } - else - { - this.exception = ExceptionDispatchInfo.Capture(ex); - } - } - finally - { - completed = true; - } - } - - public object Current => current; - - public bool MoveNext() - { - if (!isStarted) - { - isStarted = true; - RunTask(task).Forget(); - } - - if (exception != null) - { - exception.Throw(); - return false; - } - - return !completed; - } - - void IEnumerator.Reset() - { - } - } - -#endif } } diff --git a/addons/GDTask/Internal/RuntimeHelpersAbstraction.cs b/addons/GDTask/Internal/RuntimeHelpersAbstraction.cs index c811c53..96f3f85 100644 --- a/addons/GDTask/Internal/RuntimeHelpersAbstraction.cs +++ b/addons/GDTask/Internal/RuntimeHelpersAbstraction.cs @@ -1,8 +1,5 @@ using Godot; using System; -#if UNITY_2018_3_OR_NEWER -using UnityEngine; -#endif namespace Fractural.Tasks.Internal { diff --git a/addons/GDTask/Progress.cs b/addons/GDTask/Progress.cs index 44e3f4d..b2b0141 100644 --- a/addons/GDTask/Progress.cs +++ b/addons/GDTask/Progress.cs @@ -18,11 +18,7 @@ public static IProgress Create(Action handler) public static IProgress CreateOnlyValueChanged(Action handler, IEqualityComparer comparer = null) { if (handler == null) return NullProgress.Instance; -#if UNITY_2018_3_OR_NEWER - return new OnlyValueChangedProgress(handler, comparer ?? UnityEqualityComparer.GetDefault()); -#else - return new OnlyValueChangedProgress(handler, comparer ?? EqualityComparer.Default); -#endif + return new OnlyValueChangedProgress(handler, comparer ?? GodotEqualityComparer.GetDefault()); } sealed class NullProgress : IProgress diff --git a/addons/GDTask/TriggerEvent.cs b/addons/GDTask/TriggerEvent.cs index ddb86e0..980bf4e 100644 --- a/addons/GDTask/TriggerEvent.cs +++ b/addons/GDTask/TriggerEvent.cs @@ -27,11 +27,7 @@ public struct TriggerEvent void LogError(Exception ex) { -#if UNITY_2018_3_OR_NEWER GD.PrintErr(ex); -#else - Console.WriteLine(ex); -#endif } public void SetResult(T value) diff --git a/addons/GDTask/Triggers/AsyncDestroyTrigger.cs b/addons/GDTask/Triggers/AsyncDestroyTrigger.cs index eda9e6a..7f3c1c0 100644 --- a/addons/GDTask/Triggers/AsyncDestroyTrigger.cs +++ b/addons/GDTask/Triggers/AsyncDestroyTrigger.cs @@ -1,6 +1,5 @@ using System.Threading; using Godot; -using Fractural.Utils; namespace Fractural.Tasks.Triggers { diff --git a/addons/GDTask/Triggers/AsyncEnterTreeTrigger.cs b/addons/GDTask/Triggers/AsyncEnterTreeTrigger.cs index 464b730..1f4feb0 100644 --- a/addons/GDTask/Triggers/AsyncEnterTreeTrigger.cs +++ b/addons/GDTask/Triggers/AsyncEnterTreeTrigger.cs @@ -1,6 +1,5 @@ using System.Threading; using Godot; -using Fractural.Utils; namespace Fractural.Tasks.Triggers { diff --git a/addons/GDTask/Triggers/AsyncReadyTrigger.cs b/addons/GDTask/Triggers/AsyncReadyTrigger.cs index bdd8df0..b02ae72 100644 --- a/addons/GDTask/Triggers/AsyncReadyTrigger.cs +++ b/addons/GDTask/Triggers/AsyncReadyTrigger.cs @@ -1,5 +1,4 @@ using Godot; -using Fractural.Utils; namespace Fractural.Tasks.Triggers { diff --git a/addons/GDTask/Triggers/AsyncTriggerExtensions.cs b/addons/GDTask/Triggers/AsyncTriggerExtensions.cs index fe7c344..6e0d82a 100644 --- a/addons/GDTask/Triggers/AsyncTriggerExtensions.cs +++ b/addons/GDTask/Triggers/AsyncTriggerExtensions.cs @@ -1,4 +1,5 @@ -using System.Threading; +using System; +using System.Threading; using Fractural.Tasks.Triggers; using Godot; @@ -19,6 +20,33 @@ namespace Fractural.Tasks.Triggers public static partial class AsyncTriggerExtensions { // Special for single operation. + public static T GetImmediateChild(this Node node, bool includeRoot = true) + { + if (node == null) throw new ArgumentNullException(nameof(node)); + if (includeRoot && node is T castedRoot) + return castedRoot; + else + { + foreach (Node child in node.GetChildren()) + if (child is T castedChild) return castedChild; + } + return default(T); + } + + public static T AddImmediateChild(this Node node) where T : Node, new() + { + T child = new T(); + node.AddChild(child); + return child; + } + + public static T GetOrAddImmediateChild(this Node node) where T : Node, new() + { + T child = GetImmediateChild(node); + if (child == null) + child = AddImmediateChild(node); + return child; + } /// This function is called when the Node will be destroyed. public static GDTask OnDestroyAsync(this Node node) diff --git a/addons/GDTask/Triggers/NodeMessagesTriggers.cs b/addons/GDTask/Triggers/NodeMessagesTriggers.cs index 78a3804..5ff7bcd 100644 --- a/addons/GDTask/Triggers/NodeMessagesTriggers.cs +++ b/addons/GDTask/Triggers/NodeMessagesTriggers.cs @@ -1,6 +1,5 @@ using System.Threading; using Godot; -using Fractural.Utils; namespace Fractural.Tasks.Triggers { diff --git a/tests/manual/Test.cs b/tests/manual/Test.cs index 79b3c7f..13dd5ab 100644 --- a/tests/manual/Test.cs +++ b/tests/manual/Test.cs @@ -52,8 +52,6 @@ private async GDTaskVoid Run() GD.Print("WaitForPhysicsProcess"); await GDTask.NextFrame(); GD.Print("NextFrame"); - await GDTask.WaitForPhysicsProcess(); - GD.Print("WaitForPhysicsProcess"); } private async GDTask RunWithResult()