protected void SetTween(TweenerCore <Vector3, Path, PathOptions> tween)
        {
            if (direction == AnimationDirection.From)
            {
                tween.From();
            }

            tween.SetEase(ease);
            tween.SetRelative(isRelative);
            tween.Pause();
            tweener = tween;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Grab tweener, create if it doesn't exists. keyInd is the index of this key in the track.
        /// </summary>
        TweenerCore <Vector3, Path, PathOptions> GetPathTween(int frameRate)
        {
            if ((mPathTween == null || !mPathTween.active) && path.Length > 1)
            {
                //if all points are equal, then set to Linear to prevent error from DOTween
                var pathType = path.Length == 2 || IsPathPointsEqual() ? PathType.Linear : PathType.CatmullRom;

                var pathData = new Path(pathType, path, pathResolution);

                mPathTween = DOTween.To(PathPlugin.Get(), _PathGetter, _PathSetterNull, pathData, getTime(frameRate));

                mPathTween.SetRelative(false).SetOptions(isClosed);
            }

            return(mPathTween);
        }
Ejemplo n.º 3
0
        public override void build(SequenceControl seq, Track track, int index, UnityEngine.Object obj)
        {
            int frameRate = seq.take.frameRate;

            //allow tracks with just one key
            if (track.keys.Count == 1)
            {
                interp = Interpolation.None;
            }

            var trans       = obj as Transform;
            var transParent = trans.parent;

            Rigidbody   body   = trans.GetComponent <Rigidbody>();
            Rigidbody2D body2D = !body?trans.GetComponent <Rigidbody2D>() : null;

            var   tTrack    = track as TranslationTrack;
            bool  pixelSnap = tTrack.pixelSnap;
            float ppu       = tTrack.pixelPerUnit;

            if (!canTween)
            {
                //TODO: world position
                Vector3 pos = pixelSnap ? new Vector3(Mathf.Round(position.x * ppu) / ppu, Mathf.Round(position.y * ppu) / ppu, Mathf.Round(position.z * ppu) / ppu) : position;

                TweenerCore <Vector3, Vector3, TWeenPlugNoneOptions> tweener;

                if (body2D)
                {
                    tweener = DOTween.To(new TweenPlugValueSet <Vector3>(), () => trans.localPosition, (x) => body2D.position = transParent.TransformPoint(x), pos, getTime(frameRate)); //1.0f / frameRate
                }
                else if (body)
                {
                    tweener = DOTween.To(new TweenPlugValueSet <Vector3>(), () => trans.localPosition, (x) => body.position = transParent.TransformPoint(x), pos, getTime(frameRate)); //1.0f / frameRate
                }
                else
                {
                    tweener = DOTween.To(new TweenPlugValueSet <Vector3>(), () => trans.localPosition, (x) => trans.localPosition = x, pos, getTime(frameRate)); //1.0f / frameRate
                }
                seq.Insert(this, tweener);
            }
            else
            {
                if (path.Length <= 1)
                {
                    return;
                }
                if (getNumberOfFrames(seq.take.frameRate) <= 0)
                {
                    return;
                }

                TweenerCore <Vector3, Path, PathOptions> ret = null;

                bool isRelative = false;

                PathType pathType = path.Length == 2 ? PathType.Linear : PathType.CatmullRom;

                var pathTween = new Path(pathType, path, pathResolution);
                var timeTween = getTime(frameRate);

                if (body2D)
                {
                    if (pixelSnap)
                    {
                        ret = DOTween.To(PathPlugin.Get(), () => path[0], x => body2D.MovePosition(transParent.TransformPoint(new Vector2(Mathf.Round(x.x * ppu) / ppu, Mathf.Round(x.y * ppu) / ppu))), pathTween, timeTween).SetTarget(body2D);
                    }
                    else
                    {
                        ret = DOTween.To(PathPlugin.Get(), () => path[0], x => body2D.MovePosition(transParent.TransformPoint(x)), pathTween, timeTween).SetTarget(body2D);
                    }
                }
                else if (body)
                {
                    if (pixelSnap)
                    {
                        ret = DOTween.To(PathPlugin.Get(), () => path[0], x => body.MovePosition(transParent.TransformPoint(new Vector3(Mathf.Round(x.x * ppu) / ppu, Mathf.Round(x.y * ppu) / ppu, Mathf.Round(x.z * ppu) / ppu))), pathTween, timeTween).SetTarget(body);
                    }
                    else
                    {
                        ret = DOTween.To(PathPlugin.Get(), () => path[0], x => body.MovePosition(transParent.TransformPoint(x)), pathTween, timeTween).SetTarget(body);
                    }
                }
                else
                {
                    if (pixelSnap)
                    {
                        ret = DOTween.To(PathPlugin.Get(), () => path[0], x => trans.localPosition = new Vector3(Mathf.Round(x.x * ppu) / ppu, Mathf.Round(x.y * ppu) / ppu, Mathf.Round(x.z * ppu) / ppu), pathTween, timeTween).SetTarget(trans);
                    }
                    else
                    {
                        ret = DOTween.To(PathPlugin.Get(), () => path[0], x => trans.localPosition = x, pathTween, timeTween).SetTarget(trans);
                    }
                }

                ret.SetRelative(isRelative).SetOptions(isClosed);

                if (hasCustomEase())
                {
                    ret.SetEase(easeCurve);
                }
                else
                {
                    ret.SetEase(easeType, amplitude, period);
                }

                seq.Insert(this, ret);
            }
        }