// Constructor for an Animation Player. Sets up the initial paramters such as
 // this player's animation, current frame, and time displayed.
 // param: game - The over-arching Game object.
 // param: spriteBatch - The spriteBatch used to draw the Animation.
 // param: animation - The Animation to play.
 /// <summary>
 /// Constructor for an Animation Player. Sets up the initial parameters, including
 /// the player's animation, current frame, and time displayed.
 /// </summary>
 /// <param name="spriteBatch">The sprite batch used to draw this animation.</param>
 /// <param name="animation">The desired animation to begin playing.</param>
 public AnimationPlayer(SpriteBatch spriteBatch, Animation animation)
 {
     this.animation = animation;
     this.timeDisplayed = 0;
     this.currentFrame = animation.Frames[DEFAULT_START_FRAME];
     playStart = DEFAULT_START_FRAME;
     playStop = animation.FrameCount - 1;
 }
        // Changes the Animation's frame to the next frame in the sequence.
        private void IncrementFrame()
        {
            List<Frame> currentAnimation = animation.Frames;

            if (Animation.IsLooping)
            {
                currentFrame = currentAnimation[(currentFrame.FrameIndex + 1) % (playStop+1)];
                ResetTime();
            }
            else
            {
                currentFrame = currentAnimation[Math.Min(currentFrame.FrameIndex + 1, playStop)];

                if (currentFrame.FrameIndex != playStop)
                {
                    ResetTime();
                }
            }
        }
        /// <summary>
        /// Begins or continues playback of an animation from the desired
        /// start and end frames.
        /// </summary>
        /// <param name="animation">The animation to play.</param>
        /// <param name="start">The frame index to start animating from.</param>
        /// <param name="end">The frame index to end animating on.</param>
        public void PlayAnimation(Animation newAnimation, int start, int end)
        {
            // If this animation is already running, do not restart it.
            if (Animation == newAnimation)
                return;

            if ((start >= 0) && (start <= newAnimation.FrameCount - 1) &&
                (end >= 0) && (end <= newAnimation.FrameCount - 1))
            {
                playStart = start;
                playStop = end;
            }
            else
            {
                playStart = DEFAULT_START_FRAME;
                playStop = newAnimation.FrameCount - 1;
            }

            //Reset the hasDraw values to false for each of this animation's
            //frames.
            ResetDraw();

            // Start the new animation.
            this.animation = newAnimation;
            currentFrame = this.animation.Frames[playStart];
            ResetTime();
        }
 // Sets the next animation draw cycle to a specific frame in the current sequence
 // param: frameIndex - the index of the Frame to be drawn
 public void SetFrame(int frameIndex)
 {
     currentFrame = Animation.Frames[frameIndex];
 }
        /// <summary>
        /// Begins or continues playback of an animation from the beginning to
        /// the end of an animation.
        /// </summary>
        /// <param name="animation">The animation to play.</param>
        public void PlayAnimation(Animation newAnimation)
        {
            // If this animation is already running, do not restart it.
            if (Animation == newAnimation)
                return;

            //Reset the hasDraw values to false for each of this animation's
            //frames.
            ResetDraw();

            // Start the new animation.
            this.animation = newAnimation;
            currentFrame = this.animation.Frames[0];
            playStart = DEFAULT_START_FRAME;
            playStop = this.animation.FrameCount - 1;
            ResetTime();
        }