Exemplo n.º 1
0
        public void Update(GameTime gameTime)
        {
            if (animation == null)
            {
                return;
            }

            timeInCurrentFrame += (float)gameTime.ElapsedGameTime.TotalSeconds;

            while (timeInCurrentFrame > animation.SecondsPerFrame)
            {
                timeInCurrentFrame -= animation.SecondsPerFrame;

                currentFrame++;
                nextFrame++;

                if (currentFrame == animation.NumberOfFrames)
                {
                    currentFrame = 0;
                }

                if (nextFrame == animation.NumberOfFrames)
                {
                    if (looping == MD5AnimationRepeatSetting.OneTime)
                    {
                        parent.SetAnimationTrack(trackPosition, null);
                        return;
                    }
                    lastRootPosition -= animation.GetFrameSkeleton(currentFrame).RootPosition - animation.GetFrameSkeleton(0).RootPosition;
                    currentFrame      = 0;
                    nextFrame         = 1;
                }
            }

            rootPosition     = Vector3.Lerp(animation.GetFrameSkeleton(currentFrame).RootPosition, animation.GetFrameSkeleton(nextFrame).RootPosition, timeInCurrentFrame / animation.SecondsPerFrame);
            rootMovement     = rootPosition - lastRootPosition;
            lastRootPosition = rootPosition;
        }