Пример #1
0
            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);
            }
Пример #2
0
        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));
        }
Пример #3
0
            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);
            }
Пример #4
0
            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;
                }
            }
Пример #5
0
            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);
            }
Пример #6
0
 public DOTweenAwaiter(Tween tween, CancellationToken cancellationToken, TweenCancelBehaviour behaviour)
 {
     _tween             = tween;
     _cancellationToken = cancellationToken;
     _behaviour         = behaviour;
 }
Пример #7
0
 public static DOTweenAwaiter ToAwaiter(this Tween tween,
                                        CancellationToken cancellationToken = default,
                                        TweenCancelBehaviour behaviour      = TweenCancelBehaviour.Kill)
 {
     return(new DOTweenAwaiter(tween, cancellationToken, behaviour));
 }