public void Draw(GameTime gameTime, SpriteBatch spriteBatch, Vector2 position, SpriteEffects spriteEffects)
{
if (Animation == null)
throw new NotSupportedException("No animation is currently playing.");
// Process passing time.
time += (float)gameTime.ElapsedGameTime.TotalSeconds;
while (time > Animation.FrameTime)
{
time -= Animation.FrameTime;
// Advance the frame index; looping or clamping as appropriate.
if (!paused)
{
if (Animation.IsLooping)
{
frameIndex = (frameIndex + 1) % Animation.FrameCount;
}
else
{
frameIndex = Math.Min(frameIndex + 1, Animation.FrameCount - 1);
if (!done && frameIndex == Animation.FrameCount - 1)
{
Animation.Done();
done = true;
}
}
}
}
// Calculate the source rectangle of the current frame.
Rectangle source = new Rectangle(FrameIndex * Animation.Texture.Height, 0, Animation.Texture.Height, Animation.Texture.Height);
// Draw the current frame.
spriteBatch.Draw(Animation.Texture, position, source, Color.White, 0.0f, Origin, 1.0f, spriteEffects, 0.0f);
}