Exemplo n.º 1
0
        public TweenableProperty <T> AddFrame(float frame, T value, EasingFunction easingFunction)
        {
            var newFrame = new TweenKeyFrame <T>(frame, value, easingFunction);

            keyFrames.Add(newFrame);
            keyFrames = keyFrames.OrderBy(x => x.frame).ToList();
            return(this);
        }
Exemplo n.º 2
0
        public bool Update(float timelineElapsed)
        {
            TweenKeyFrame <T> lastFrame = null;
            TweenKeyFrame <T> nextFrame = null;

            foreach (var frame in keyFrames)
            {
                if (frame.frame <= timelineElapsed)
                {
                    lastFrame = frame;
                }
                else
                {
                    nextFrame = frame;
                    break;
                }
            }

            if (nextFrame == null)
            {
                if (!Done)
                {
                    SetValue(lastFrame.value);
                }

                Done = true;
                return(false);
            }
            else
            {
                if (lastFrame == null)
                {
                    var progress      = timelineElapsed / nextFrame.frame;
                    var easedProgress = nextFrame.easingFunction(progress);
                    var newValue      = lerpFunction(initialValue, nextFrame.value, easedProgress);
                    SetValue(newValue);
                }
                else
                {
                    var progress      = (timelineElapsed - lastFrame.frame) / (nextFrame.frame - lastFrame.frame);
                    var easedProgress = nextFrame.easingFunction(progress);
                    var newValue      = lerpFunction(lastFrame.value, nextFrame.value, easedProgress);
                    SetValue(newValue);
                }
            }

            return(true);
        }