Beispiel #1
0
        public static UniTask.Awaiter GetAwaiter(this JobHandle jobHandle)
        {
            var handler = JobHandlePromise.Create(jobHandle, out var token);

            {
                PlayerLoopHelper.AddAction(PlayerLoopTiming.EarlyUpdate, handler);
                PlayerLoopHelper.AddAction(PlayerLoopTiming.PreUpdate, handler);
                PlayerLoopHelper.AddAction(PlayerLoopTiming.Update, handler);
                PlayerLoopHelper.AddAction(PlayerLoopTiming.PreLateUpdate, handler);
                PlayerLoopHelper.AddAction(PlayerLoopTiming.PostLateUpdate, handler);
            }

            return(new UniTask(handler, token).GetAwaiter());
        }
        /// <summary>
        /// Restart(Reset and Start) and change interval.
        /// </summary>
        public void Restart(TimeSpan interval)
        {
            if (isDisposed)
            {
                throw new ObjectDisposedException(null);
            }

            ResetCore(interval); // init state
            if (!isRunning)
            {
                isRunning = true;
                PlayerLoopHelper.AddAction(playerLoopTiming, this);
            }
            tryStop = false;
        }
Beispiel #3
0
            public static IUniTaskSource Create(CancellationToken cancellationToken, PlayerLoopTiming timing, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                var result = pool.TryRent() ?? new WaitUntilCanceledPromise();

                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
            public static StoppableDelayRealtimePromise Create(TimeSpan delayTimeSpan, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (!pool.TryPop(out var result))
                {
                    result = new StoppableDelayRealtimePromise();
                }

                result.stopwatch          = ValueStopwatch.StartNew();
                result.delayTimeSpanTicks = delayTimeSpan.Ticks;
                result.cancellationToken  = cancellationToken;
                result.externalStop       = false;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
Beispiel #5
0
            public static IUniTaskSource Create(AsyncOperation asyncOperation, PlayerLoopTiming timing, IProgress <float> progress, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                var result = pool.TryRent() ?? new AsyncOperationConfiguredSource();

                result.asyncOperation    = asyncOperation;
                result.progress          = progress;
                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
Beispiel #6
0
            public static IUniTaskSource Create(TimeSpan delayFrameTimeSpan, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                var result = pool.TryRent() ?? new DelayIgnoreTimeScalePromise();

                result.elapsed            = 0.0f;
                result.delayFrameTimeSpan = (float)delayFrameTimeSpan.TotalSeconds;
                result.cancellationToken  = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
Beispiel #7
0
            public static IUniTaskSource Create(IEnumerator innerEnumerator, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new EnumeratorPromise();
                }
                TaskTracker.TrackActiveTask(result, 3);

                result.innerEnumerator   = ConsumeEnumerator(innerEnumerator);
                result.cancellationToken = cancellationToken;

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
            public static IUniTaskSource Create(int delayFrameCount, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new DelayFramePromise();
                }

                result.delayFrameCount   = delayFrameCount;
                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
            public static IUniTaskSource Create(Func <bool> predicate, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new WaitUntilPromise();
                }

                result.predicate         = predicate;
                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
Beispiel #10
0
            public static IUniTaskSource <U> Create(T target, Func <T, U> monitorFunction, IEqualityComparer <U> equalityComparer, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource <U> .CreateFromCanceled(cancellationToken, out token));
                }

                var result = pool.TryRent() ?? new WaitUntilValueChangedStandardObjectPromise <T, U>();

                result.target            = new WeakReference <T>(target, false); // wrap in WeakReference.
                result.monitorFunction   = monitorFunction;
                result.currentValue      = monitorFunction(target);
                result.equalityComparer  = equalityComparer ?? UnityEqualityComparer.GetDefault <U>();
                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
Beispiel #11
0
            public static IUniTaskSource <AsyncGPUReadbackRequest> Create(AsyncGPUReadbackRequest asyncOperation, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource <AsyncGPUReadbackRequest> .CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new AsyncGPUReadbackRequestAwaiterConfiguredSource();
                }

                result.asyncOperation    = asyncOperation;
                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
            public static IUniTaskSource <UnityEngine.Object[]> Create(AssetBundleRequest asyncOperation, PlayerLoopTiming timing, IProgress <float> progress, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource <UnityEngine.Object[]> .CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new AssetBundleRequestAllAssetsConfiguredSource();
                }

                result.asyncOperation    = asyncOperation;
                result.progress          = progress;
                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
            public static IUniTaskSource Create(TimeSpan delayTimeSpan, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new DelayRealtimePromise();
                }

                result.stopwatch          = ValueStopwatch.StartNew();
                result.delayTimeSpanTicks = delayTimeSpan.Ticks;
                result.cancellationToken  = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
            public static IUniTaskSource Create(TimeSpan delayTimeSpan, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new DelayPromise();
                }

                result.elapsed           = 0.0f;
                result.delayTimeSpan     = (float)delayTimeSpan.TotalSeconds;
                result.cancellationToken = cancellationToken;
                result.initialFrame      = PlayerLoopHelper.IsMainThread ? Time.frameCount : -1;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
Beispiel #15
0
 public void UnsafeOnCompleted(Action continuation)
 {
     PlayerLoopHelper.AddContinuation(timing, continuation);
 }
Beispiel #16
0
 public void OnCompleted(Action continuation)
 {
     PlayerLoopHelper.AddContinuation(playerLoopTiming, continuation);
 }
Beispiel #17
0
 public void UnsafeOnCompleted(Action continuation)
 {
     PlayerLoopHelper.AddContinuation(PlayerLoopTiming.Update, continuation);
 }
 /// <summary>
 /// Queue the action to PlayerLoop.
 /// </summary>
 public static void Post(Action action, PlayerLoopTiming timing = PlayerLoopTiming.Update)
 {
     PlayerLoopHelper.AddContinuation(timing, action);
 }