public static IUniTaskSource Create(Tween tween, TweenCancelBehaviour cancelBehaviour, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { DoCancelBeforeCreate(tween, cancelBehaviour); return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token)); } if (!pool.TryPop(out var result)) { result = new TweenConfiguredSource(); } result.tween = tween; result.cancelBehaviour = cancelBehaviour; result.cancellationToken = cancellationToken; result.originalUpdateAction = tween.onUpdate; result.canceled = false; if (result.originalUpdateAction == result.onUpdateDelegate) { result.originalUpdateAction = null; } tween.onUpdate = result.onUpdateDelegate; tween.onKill = result.onKillDelegate; TaskTracker.TrackActiveTask(result, 3); token = result.core.Version; return(result); }
public static UniTask AwaitForPlay(this Tween tween, TweenCancelBehaviour tweenCancelBehaviour = TweenCancelBehaviour.Kill, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(tween, nameof(tween)); if (!tween.IsActive()) { return(UniTask.CompletedTask); } return(new UniTask(TweenConfiguredSource.Create(tween, tweenCancelBehaviour, cancellationToken, CallbackType.Play, out var token), token)); }
public static IUniTaskSource Create(Tween tween, TweenCancelBehaviour cancelBehaviour, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token)); } var result = pool.TryRent() ?? new TweenConfiguredSource(); result.tween = tween; result.cancelBehaviour = cancelBehaviour; result.cancellationToken = cancellationToken; TaskTracker.TrackActiveTask(result, 3); result.RegisterEvent(); token = result.core.Version; return(result); }
static void DoCancelBeforeCreate(Tween tween, TweenCancelBehaviour tweenCancelBehaviour) { switch (tweenCancelBehaviour) { case TweenCancelBehaviour.Kill: default: tween.Kill(false); break; case TweenCancelBehaviour.KillAndCancelAwait: tween.Kill(false); break; case TweenCancelBehaviour.KillWithCompleteCallback: tween.Kill(true); break; case TweenCancelBehaviour.KillWithCompleteCallbackAndCancelAwait: tween.Kill(true); break; case TweenCancelBehaviour.Complete: tween.Complete(false); break; case TweenCancelBehaviour.CompleteAndCancelAwait: tween.Complete(false); break; case TweenCancelBehaviour.CompleteWithSequenceCallback: tween.Complete(true); break; case TweenCancelBehaviour.CompleteWithSequenceCallbackAndCancelAwait: tween.Complete(true); break; case TweenCancelBehaviour.CancelAwait: break; } }
public static IUniTaskSource Create(Tween tween, TweenCancelBehaviour cancelBehaviour, CancellationToken cancellationToken, CallbackType callbackType, out short token) { if (cancellationToken.IsCancellationRequested) { DoCancelBeforeCreate(tween, cancelBehaviour); return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token)); } if (!pool.TryPop(out var result)) { result = new TweenConfiguredSource(); } result.tween = tween; result.cancelBehaviour = cancelBehaviour; result.cancellationToken = cancellationToken; result.callbackType = callbackType; result.originalUpdateAction = tween.onUpdate; result.canceled = false; if (result.originalUpdateAction == result.onUpdateDelegate) { result.originalUpdateAction = null; } tween.onUpdate = result.onUpdateDelegate; switch (callbackType) { case CallbackType.Kill: result.originalCompleteAction = tween.onKill; tween.onKill = result.onCompleteCallbackDelegate; break; case CallbackType.Complete: result.originalCompleteAction = tween.onComplete; tween.onComplete = result.onCompleteCallbackDelegate; break; case CallbackType.Pause: result.originalCompleteAction = tween.onPause; tween.onPause = result.onCompleteCallbackDelegate; break; case CallbackType.Play: result.originalCompleteAction = tween.onPlay; tween.onPlay = result.onCompleteCallbackDelegate; break; case CallbackType.Rewind: result.originalCompleteAction = tween.onRewind; tween.onRewind = result.onCompleteCallbackDelegate; break; case CallbackType.StepComplete: result.originalCompleteAction = tween.onStepComplete; tween.onStepComplete = result.onCompleteCallbackDelegate; break; default: break; } if (result.originalCompleteAction == result.onCompleteCallbackDelegate) { result.originalCompleteAction = null; } TaskTracker.TrackActiveTask(result, 3); token = result.core.Version; return(result); }
public DOTweenAwaiter(Tween tween, CancellationToken cancellationToken, TweenCancelBehaviour behaviour) { _tween = tween; _cancellationToken = cancellationToken; _behaviour = behaviour; }
public static DOTweenAwaiter ToAwaiter(this Tween tween, CancellationToken cancellationToken = default, TweenCancelBehaviour behaviour = TweenCancelBehaviour.Kill) { return(new DOTweenAwaiter(tween, cancellationToken, behaviour)); }