Exemplo n.º 1
0
        // update cache (optimized)
        public override void updateCache(AMITarget target)
        {
            base.updateCache(target);

            for (int i = 0; i < keys.Count; i++)
            {
                AMRotationEulerKey key = keys[i] as AMRotationEulerKey;

                key.version = version;

                if (keys.Count > (i + 1))
                {
                    key.endFrame = keys[i + 1].frame;
                }
                else
                {
                    if (i > 0 && !keys[i - 1].canTween)
                    {
                        key.interp = (int)AMKey.Interpolation.None;
                    }

                    key.endFrame = -1;
                }
            }
        }
Exemplo n.º 2
0
        // add a new key
        public void addKey(AMITarget target, OnAddKey addCall, int _frame, Vector3 _rotation)
        {
            foreach (AMRotationEulerKey key in keys)
            {
                // if key exists on frame, update key
                if (key.frame == _frame)
                {
                    key.rotation = _rotation;
                    // update cache
                    updateCache(target);
                    return;
                }
            }
            AMRotationEulerKey a = addCall(gameObject, typeof(AMRotationEulerKey)) as AMRotationEulerKey;

            a.frame    = _frame;
            a.rotation = _rotation;
            // set default ease type to linear
            a.easeType = (int)Ease.Linear;

            // add a new key
            keys.Add(a);
            // update cache
            updateCache(target);
        }
Exemplo n.º 3
0
        // preview a frame in the scene view
        public override void previewFrame(AMITarget target, float frame, int frameRate, bool play, float playSpeed)
        {
            Transform t = GetTarget(target) as Transform;

            if (!t)
            {
                return;
            }
            if (keys == null || keys.Count <= 0)
            {
                return;
            }

            // if before or equal to first frame, or is the only frame
            AMRotationEulerKey firstKey = keys[0] as AMRotationEulerKey;

            if (firstKey.endFrame == -1 || (frame <= (float)firstKey.frame && !firstKey.canTween))
            {
                ApplyRot(t, firstKey.rotation);
                return;
            }

            // if lies on rotation action
            for (int i = 0; i < keys.Count; i++)
            {
                AMRotationEulerKey key     = keys[i] as AMRotationEulerKey;
                AMRotationEulerKey keyNext = i + 1 < keys.Count ? keys[i + 1] as AMRotationEulerKey : null;

                if (frame >= (float)key.endFrame && keyNext != null && (!keyNext.canTween || keyNext.endFrame != -1))
                {
                    continue;
                }
                // if no ease
                if (!key.canTween || keyNext == null)
                {
                    ApplyRot(t, key.rotation);
                    return;
                }
                // else easing function

                float numFrames = (float)key.getNumberOfFrames(frameRate);

                float framePositionInAction = Mathf.Clamp(frame - (float)key.frame, 0f, numFrames);

                Vector3 qStart = key.rotation;
                Vector3 qEnd   = keyNext.rotation;

                if (key.hasCustomEase())
                {
                    ApplyRot(t, Vector3.Lerp(qStart, qEnd, Utility.EaseCustom(0.0f, 1.0f, framePositionInAction / numFrames, key.easeCurve)));
                }
                else
                {
                    var ease = Utility.GetEasingFunction((Ease)key.easeType);
                    ApplyRot(t, Vector3.Lerp(qStart, qEnd, ease(framePositionInAction, numFrames, key.amplitude, key.period)));
                }

                return;
            }
        }
Exemplo n.º 4
0
        // copy properties from key
        public override void CopyTo(AMKey key)
        {
            base.CopyTo(key);

            AMRotationEulerKey a = key as AMRotationEulerKey;

            a.rotation = rotation;
        }
Exemplo n.º 5
0
        // copy properties from key
        public override void CopyTo(AMKey key)
        {
            AMRotationEulerKey a = key as AMRotationEulerKey;

            a.enabled    = false;
            a.frame      = frame;
            a.rotation   = rotation;
            a.easeType   = easeType;
            a.customEase = new List <float>(customEase);
        }
Exemplo n.º 6
0
        Vector3 getRotationAtFrame(int frame, int frameRate)
        {
            // if before or equal to first frame, or is the only frame
            AMRotationEulerKey firstKey = keys[0] as AMRotationEulerKey;

            if (firstKey.endFrame == -1 || (frame <= (float)firstKey.frame && !firstKey.canTween))
            {
                return(firstKey.rotation);
            }

            // if lies on rotation action
            for (int i = 0; i < keys.Count; i++)
            {
                AMRotationEulerKey key     = keys[i] as AMRotationEulerKey;
                AMRotationEulerKey keyNext = i + 1 < keys.Count ? keys[i + 1] as AMRotationEulerKey : null;

                if (frame >= (float)key.endFrame && keyNext != null && (!keyNext.canTween || keyNext.endFrame != -1))
                {
                    continue;
                }
                // if no ease
                if (!key.canTween || keyNext == null)
                {
                    return(key.rotation);
                }
                // else easing function

                float numFrames = (float)key.getNumberOfFrames(frameRate);

                float framePositionInAction = Mathf.Clamp(frame - (float)key.frame, 0f, numFrames);

                Vector3 qStart = key.rotation;
                Vector3 qEnd   = keyNext.rotation;

                if (key.hasCustomEase())
                {
                    return(Vector3.Lerp(qStart, qEnd, Utility.EaseCustom(0.0f, 1.0f, framePositionInAction / numFrames, key.easeCurve)));
                }
                else
                {
                    var ease = Utility.GetEasingFunction((Ease)key.easeType);
                    return(Vector3.Lerp(qStart, qEnd, ease(framePositionInAction, numFrames, key.amplitude, key.period)));
                }
            }

            Debug.LogError("Animator: Could not get rotation at frame '" + frame + "'");
            return(Vector3.zero);
        }