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; }
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); }
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); }
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); }
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); }
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); }
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); }
public void UnsafeOnCompleted(Action continuation) { PlayerLoopHelper.AddContinuation(timing, continuation); }
public void OnCompleted(Action continuation) { PlayerLoopHelper.AddContinuation(playerLoopTiming, continuation); }
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); }