public override void Draw(SpriteBatch spriteBatch, float elapsedSeconds, float totalSeconds) { var tileWidth = this.texture.Width / config.TilingX; var tileHeight = this.texture.Height / config.TilingY; int inAnimationNum = (int)((totalSeconds % CurrentAnimation.Duration) * CurrentAnimation.FrameNumbers.Length); int inImageFrameNum = CurrentAnimation.FrameNumbers[inAnimationNum]; var x = inImageFrameNum % config.TilingX; var y = (inImageFrameNum / config.TilingX) % config.TilingY; this.sourceRectangle = new Rectangle(x * tileWidth, y * tileHeight, tileWidth, tileHeight); if (NextAnimation != null && neutralFrames.Contains(inImageFrameNum)) { CurrentAnimation = NextAnimation; NextAnimation = null; } base.Draw(spriteBatch, elapsedSeconds, totalSeconds); }
public void SwitchTo(string animationName) { NextAnimation = animByName[animationName]; }