Esempio n. 1
0
 /// <summary>Fires the given callback after the given time.</summary>
 /// <param name="delay">Callback delay</param>
 /// <param name="callback">Callback to fire when the delay has expired</param>
 /// <param name="ignoreTimeScale">If TRUE (default) ignores Unity's timeScale</param>
 public static Tween DelayedCall(float delay, TweenCallback callback, bool ignoreTimeScale = true)
 {
     return(DOTween.Sequence().AppendInterval(delay).OnStepComplete(callback).SetUpdate(UpdateType.Normal, ignoreTimeScale).SetAutoKill(true));
 }
Esempio n. 2
0
        void FixedUpdate()
        {
            if (!_isRolling)
            {
                return;
            }

            if (_currentNumberIndex < _maxCount && Time.time >= _startTime + _currentNumberIndex * _interval)
            {
                _currentNumberIndex += 1;
            }

            for (int i = 0; i < _currentNumberIndex; i++)
            {
                if (_restRollingTimes[i] < 0)
                {
                    continue;
                }

                Text number1 = _numberList1[i];
                Text number2 = _numberList2[i];
                number1.rectTransform.SetAnchoredPosY(_originSize.y - (_originSize.y - (number1.rectTransform.anchoredPosition.y - Time.deltaTime * _speed)) % (2 * _originSize.y));
                if (number1.rectTransform.anchoredPosition.y - Time.deltaTime * _speed <= -_originSize.y && _restRollingTimes[i] >= 0)
                {
                    _restRollingTimes[i] -= 1;
                    if (_restRollingTimes[i] < 0)
                    {
                        number1.transform.DOLocalMoveY(-_originSize.y, _bufferTime);
                        var s = DOTween.Sequence();
                        s.Append(number2.transform.DOLocalMoveY(-_bufferLength, _bufferTime)).Append(number2.transform.DOLocalMoveY(0, _harmonicTime).SetEase(Ease.OutCubic));
                        continue;
                    }
                    number1.rectTransform.SetAnchoredPosY(number1.rectTransform.anchoredPosition.y + 2 * _originSize.y);
                    number1.text = NextNumber(number2.text);
                }
                number2.rectTransform.SetAnchoredPosY(_originSize.y - (_originSize.y - (number2.rectTransform.anchoredPosition.y - Time.deltaTime * _speed)) % (2 * _originSize.y));
                if (number2.rectTransform.anchoredPosition.y - Time.deltaTime * _speed <= -_originSize.y && _restRollingTimes[i] >= 0)
                {
                    _restRollingTimes[i] -= 1;
                    if (_restRollingTimes[i] < 0)
                    {
                        number2.transform.DOLocalMoveY(-_originSize.y, _bufferTime);
                        var s = DOTween.Sequence();
                        s.Append(number1.transform.DOLocalMoveY(-_bufferLength, _bufferTime)).Append(number1.transform.DOLocalMoveY(0, _harmonicTime).SetEase(Ease.OutCubic));
                        continue;
                    }
                    number2.rectTransform.SetAnchoredPosY(number2.rectTransform.anchoredPosition.y + 2 * _originSize.y);
                    number2.text = NextNumber(number1.text);
                }
            }

            if ((_maxCount > 1 && _restRollingTimes[_maxCount - 2] < 0 && _restRollingTimes[_maxCount - 1] < 0) || (_maxCount == 1 && _restRollingTimes[0] < 0))
            {
                if (!_fromZero)
                {
                    transform.DOLocalMoveX(_lengthDelta / 2, _tweakTime).SetEase(Ease.OutCubic);
                }

                onComplete?.Invoke();
                _isRolling = false;
            }
        }
Esempio n. 3
0
        // Used also by DOTweenAnimationInspector when applying runtime changes and restarting
        public void CreateTween()
        {
            if (target == null)
            {
                Debug.LogWarning(string.Format("{0} :: This tween's target is NULL, because the animation was created with a DOTween Pro version older than 0.9.255. To fix this, exit Play mode then simply select this object, and it will update automatically", this.gameObject.name), this.gameObject);
                return;
            }

            if (forcedTargetType != TargetType.Unset)
            {
                targetType = forcedTargetType;
            }
            if (targetType == TargetType.Unset)
            {
                // Legacy DOTweenAnimation (made with a version older than 0.9.450) without stored targetType > assign it now
                targetType = TypeToDOTargetType(target.GetType());
            }

            switch (animationType)
            {
            case DOTweenAnimationType.None:
                break;

            case DOTweenAnimationType.Move:
                if (useTargetAsV3)
                {
                    isRelative = false;
                    if (endValueTransform == null)
                    {
                        Debug.LogWarning(string.Format("{0} :: This tween's TO target is NULL, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject);
                        endValueV3 = Vector3.zero;
                    }
                    else
                    {
                        if (targetType == TargetType.RectTransform)
                        {
                            RectTransform endValueT = endValueTransform as RectTransform;
                            if (endValueT == null)
                            {
                                Debug.LogWarning(string.Format("{0} :: This tween's TO target should be a RectTransform, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject);
                                endValueV3 = Vector3.zero;
                            }
                            else
                            {
                                RectTransform rTarget = target as RectTransform;
                                if (rTarget == null)
                                {
                                    Debug.LogWarning(string.Format("{0} :: This tween's target and TO target are not of the same type. Please reassign the values", this.gameObject.name), this.gameObject);
                                }
                                else
                                {
                                    // Problem: doesn't work inside Awake (ararargh!)
                                    endValueV3 = DOTweenUtils46.SwitchToRectTransform(endValueT, rTarget);
                                }
                            }
                        }
                        else
                        {
                            endValueV3 = endValueTransform.position;
                        }
                    }
                }
                switch (targetType)
                {
                case TargetType.RectTransform:
                    tween = ((RectTransform)target).DOAnchorPos3D(endValueV3, duration, optionalBool0);
                    break;

                case TargetType.Transform:
                    tween = ((Transform)target).DOMove(endValueV3, duration, optionalBool0);
                    break;

                case TargetType.Rigidbody2D:
                    tween = ((Rigidbody2D)target).DOMove(endValueV3, duration, optionalBool0);
                    break;

                case TargetType.Rigidbody:
                    tween = ((Rigidbody)target).DOMove(endValueV3, duration, optionalBool0);
                    break;
                }
                break;

            case DOTweenAnimationType.LocalMove:
                tween = transform.DOLocalMove(endValueV3, duration, optionalBool0);
                break;

            case DOTweenAnimationType.Rotate:
                switch (targetType)
                {
                case TargetType.Transform:
                    tween = ((Transform)target).DORotate(endValueV3, duration, optionalRotationMode);
                    break;

                case TargetType.Rigidbody2D:
                    tween = ((Rigidbody2D)target).DORotate(endValueFloat, duration);
                    break;

                case TargetType.Rigidbody:
                    tween = ((Rigidbody)target).DORotate(endValueV3, duration, optionalRotationMode);
                    break;
                }
                break;

            case DOTweenAnimationType.LocalRotate:
                tween = transform.DOLocalRotate(endValueV3, duration, optionalRotationMode);
                break;

            case DOTweenAnimationType.Scale:
                tween = transform.DOScale(optionalBool0 ? new Vector3(endValueFloat, endValueFloat, endValueFloat) : endValueV3, duration);
                break;

            case DOTweenAnimationType.UIWidthHeight:
                tween = ((RectTransform)target).DOSizeDelta(optionalBool0 ? new Vector2(endValueFloat, endValueFloat) : endValueV2, duration);
                break;

            case DOTweenAnimationType.Color:
                isRelative = false;
                switch (targetType)
                {
                case TargetType.SpriteRenderer:
                    tween = ((SpriteRenderer)target).DOColor(endValueColor, duration);
                    break;

                case TargetType.Renderer:
                    tween = ((Renderer)target).material.DOColor(endValueColor, duration);
                    break;

                case TargetType.Image:
                    tween = ((Image)target).DOColor(endValueColor, duration);
                    break;

                case TargetType.Text:
                    tween = ((Text)target).DOColor(endValueColor, duration);
                    break;

                case TargetType.Light:
                    tween = ((Light)target).DOColor(endValueColor, duration);
                    break;

#if DOTWEEN_TK2D
                case TargetType.tk2dTextMesh:
                    tween = ((tk2dTextMesh)target).DOColor(endValueColor, duration);
                    break;

                case TargetType.tk2dBaseSprite:
                    tween = ((tk2dBaseSprite)target).DOColor(endValueColor, duration);
                    break;
#endif
#if DOTWEEN_TMP
                case TargetType.TextMeshProUGUI:
                    tween = ((TextMeshProUGUI)target).DOColor(endValueColor, duration);
                    break;

                case TargetType.TextMeshPro:
                    tween = ((TextMeshPro)target).DOColor(endValueColor, duration);
                    break;
#endif
                }
                break;

            case DOTweenAnimationType.Fade:
                isRelative = false;
                switch (targetType)
                {
                case TargetType.SpriteRenderer:
                    tween = ((SpriteRenderer)target).DOFade(endValueFloat, duration);
                    break;

                case TargetType.Renderer:
                    tween = ((Renderer)target).material.DOFade(endValueFloat, duration);
                    break;

                case TargetType.Image:
                    tween = ((Image)target).DOFade(endValueFloat, duration);
                    break;

                case TargetType.Text:
                    tween = ((Text)target).DOFade(endValueFloat, duration);
                    break;

                case TargetType.Light:
                    tween = ((Light)target).DOIntensity(endValueFloat, duration);
                    break;

                case TargetType.CanvasGroup:
                    tween = ((CanvasGroup)target).DOFade(endValueFloat, duration);
                    break;

#if DOTWEEN_TK2D
                case TargetType.tk2dTextMesh:
                    tween = ((tk2dTextMesh)target).DOFade(endValueFloat, duration);
                    break;

                case TargetType.tk2dBaseSprite:
                    tween = ((tk2dBaseSprite)target).DOFade(endValueFloat, duration);
                    break;
#endif
#if DOTWEEN_TMP
                case TargetType.TextMeshProUGUI:
                    tween = ((TextMeshProUGUI)target).DOFade(endValueFloat, duration);
                    break;

                case TargetType.TextMeshPro:
                    tween = ((TextMeshPro)target).DOFade(endValueFloat, duration);
                    break;
#endif
                }
                break;

            case DOTweenAnimationType.Text:
                switch (targetType)
                {
                case TargetType.Text:
                    tween = ((Text)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString);
                    break;

#if DOTWEEN_TK2D
                case TargetType.tk2dTextMesh:
                    tween = ((tk2dTextMesh)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString);
                    break;
#endif
#if DOTWEEN_TMP
                case TargetType.TextMeshProUGUI:
                    tween = ((TextMeshProUGUI)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString);
                    break;

                case TargetType.TextMeshPro:
                    tween = ((TextMeshPro)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString);
                    break;
#endif
                }
                break;

            case DOTweenAnimationType.PunchPosition:
                switch (targetType)
                {
                case TargetType.RectTransform:
                    tween = ((RectTransform)target).DOPunchAnchorPos(endValueV3, duration, optionalInt0, optionalFloat0, optionalBool0);
                    break;

                case TargetType.Transform:
                    tween = ((Transform)target).DOPunchPosition(endValueV3, duration, optionalInt0, optionalFloat0, optionalBool0);
                    break;
                }
                break;

            case DOTweenAnimationType.PunchScale:
                tween = transform.DOPunchScale(endValueV3, duration, optionalInt0, optionalFloat0);
                break;

            case DOTweenAnimationType.PunchRotation:
                tween = transform.DOPunchRotation(endValueV3, duration, optionalInt0, optionalFloat0);
                break;

            case DOTweenAnimationType.ShakePosition:
                switch (targetType)
                {
                case TargetType.RectTransform:
                    tween = ((RectTransform)target).DOShakeAnchorPos(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool0);
                    break;

                case TargetType.Transform:
                    tween = ((Transform)target).DOShakePosition(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool0);
                    break;
                }
                break;

            case DOTweenAnimationType.ShakeScale:
                tween = transform.DOShakeScale(duration, endValueV3, optionalInt0, optionalFloat0);
                break;

            case DOTweenAnimationType.ShakeRotation:
                tween = transform.DOShakeRotation(duration, endValueV3, optionalInt0, optionalFloat0);
                break;

            case DOTweenAnimationType.CameraAspect:
                tween = ((Camera)target).DOAspect(endValueFloat, duration);
                break;

            case DOTweenAnimationType.CameraBackgroundColor:
                tween = ((Camera)target).DOColor(endValueColor, duration);
                break;

            case DOTweenAnimationType.CameraFieldOfView:
                tween = ((Camera)target).DOFieldOfView(endValueFloat, duration);
                break;

            case DOTweenAnimationType.CameraOrthoSize:
                tween = ((Camera)target).DOOrthoSize(endValueFloat, duration);
                break;

            case DOTweenAnimationType.CameraPixelRect:
                tween = ((Camera)target).DOPixelRect(endValueRect, duration);
                break;

            case DOTweenAnimationType.CameraRect:
                tween = ((Camera)target).DORect(endValueRect, duration);
                break;

            case DOTweenAnimationType.BezierMove:
                if (useTargetAsV3)
                {
                    isRelative = false;
                    if (endValueTransform == null)
                    {
                        Debug.LogWarning(string.Format("{0} :: This tween's TO target is NULL, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject);
                        endValueV3 = Vector3.zero;
                    }
                    else
                    {
                        if (targetType == TargetType.RectTransform)
                        {
                            RectTransform endValueT = endValueTransform as RectTransform;
                            if (endValueT == null)
                            {
                                Debug.LogWarning(string.Format("{0} :: This tween's TO target should be a RectTransform, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject);
                                endValueV3 = Vector3.zero;
                            }
                            else
                            {
                                RectTransform rTarget = target as RectTransform;
                                if (rTarget == null)
                                {
                                    Debug.LogWarning(string.Format("{0} :: This tween's target and TO target are not of the same type. Please reassign the values", this.gameObject.name), this.gameObject);
                                }
                                else
                                {
                                    // Problem: doesn't work inside Awake (ararargh!)
                                    endValueV3 = DOTweenUtils46.SwitchToRectTransform(endValueT, rTarget);
                                }
                            }
                        }
                        else
                        {
                            endValueV3 = endValueTransform.position;
                        }
                    }
                }

                Vector3 startPt = target.transform.localPosition;
                //bool isRight = startPt.x > 0;

                Vector3 ctrlPt1;
                Vector3 ctrlPt2;
                if (useRandomRange)
                {
                    ctrlPt1.x = UnityEngine.Random.Range(P1_Offset.x, P1_RandomRange.x);
                    ctrlPt1.y = UnityEngine.Random.Range(P1_Offset.y, P1_RandomRange.y);
                }
                else
                {
                    ctrlPt1.x = P1_Offset.x;
                    ctrlPt1.y = P1_Offset.y;
                }
                ctrlPt1.z = startPt.z;

                ctrlPt2.x = P2_Offset.x;
                ctrlPt2.y = P2_Offset.y;
                ctrlPt2.z = ctrlPt1.z;

                if (same_P1)
                {
                    if ((ctrlPt1.x < 0 && ctrlPt2.x > 0) || (ctrlPt1.x > 0 && ctrlPt2.x < 0))
                    {
                        ctrlPt2.x *= -1;
                    }

                    if ((ctrlPt1.y < 0 && ctrlPt2.y > 0) || (ctrlPt1.y > 0 && ctrlPt2.y < 0))
                    {
                        ctrlPt2.y *= -1;
                    }
                }


                //Debug.LogError (string.Format ("ctrlPt1:{0}  ctrlPt2:{1}", ctrlPt1.ToString (), ctrlPt2.ToString ()));

                Vector3[] path = GetBeizerList(startPt, ctrlPt1, ctrlPt2, endValueV3, 50);

                switch (targetType)
                {
                case TargetType.RectTransform:
                case TargetType.Transform:
                    tween = ((Transform)target.transform).DOLocalPath(path, duration, PathType.CatmullRom);
                    break;

                case TargetType.Rigidbody2D:
                    tween = (target.transform).DOLocalPath(path, duration, PathType.CatmullRom);
                    break;

                case TargetType.Rigidbody:
                    tween = (target.transform).DOLocalPath(path, duration, PathType.CatmullRom);
                    break;
                }
                if (useScal)
                {
                    var scale1 = target.transform.DOScale(P1_Scal.x, P1_Scal.y);
                    var scale2 = target.transform.DOScale(P2_Scal.x, P2_Scal.y);
                    var scale3 = target.transform.DOScale(End_Scal.x, End_Scal.y);

                    var scale = DOTween.Sequence();

                    scale.AppendInterval(delay);
                    scale.Append(scale1);
                    scale.Append(scale2);
                    scale.Append(scale3);
                }
                break;
            }

            if (tween == null)
            {
                return;
            }

            if (isFrom)
            {
                ((Tweener)tween).From(isRelative);
            }
            else
            {
                tween.SetRelative(isRelative);
            }

            if (DOTweenAnimationType.BezierMove == animationType)
            {
                tween.SetDelay(delay).SetLoops(loops, loopType).SetAutoKill(autoKill)
                .OnKill(() => tween = null);
            }
            else
            {
                tween.SetTarget(this.gameObject).SetDelay(delay).SetLoops(loops, loopType).SetAutoKill(autoKill)
                .OnKill(() => tween = null);
            }
            if (isSpeedBased)
            {
                tween.SetSpeedBased();
            }
            if (easeType == Ease.INTERNAL_Custom)
            {
                tween.SetEase(easeCurve);
            }
            else
            {
                tween.SetEase(easeType);
            }
            if (!string.IsNullOrEmpty(id))
            {
                tween.SetId(id);
            }
            tween.SetUpdate(isIndependentUpdate);

            if (hasOnStart)
            {
                if (onStart != null)
                {
                    tween.OnStart(onStart.Invoke);
                }
            }
            else
            {
                onStart = null;
            }
            if (hasOnPlay)
            {
                if (onPlay != null)
                {
                    tween.OnPlay(onPlay.Invoke);
                }
            }
            else
            {
                onPlay = null;
            }
            if (hasOnUpdate)
            {
                if (onUpdate != null)
                {
                    tween.OnUpdate(onUpdate.Invoke);
                }
            }
            else
            {
                onUpdate = null;
            }
            if (hasOnStepComplete)
            {
                if (onStepComplete != null)
                {
                    tween.OnStepComplete(onStepComplete.Invoke);
                }
            }
            else
            {
                onStepComplete = null;
            }
            if (hasOnComplete)
            {
                if (onComplete != null)
                {
                    tween.OnComplete(onComplete.Invoke);
                }
            }
            else
            {
                onComplete = null;
            }

            if (autoPlay)
            {
                tween.Play();
            }
            else
            {
                tween.Pause();
            }

            if (hasOnTweenCreated && onTweenCreated != null)
            {
                onTweenCreated.Invoke();
            }
        }