public RenderedPosition?GetCurrentRenderedPositionForTimeline(int timelineId) { // Get the frame image FrameImage fimg = null; Frame frame = Data.Animations[CurrentAnimation].Frames[FrameIndex]; float layer = LayerStart; foreach (FrameImage fi in frame.Objects) { if (fi.TimelineId.Equals(timelineId)) { fimg = fi; break; } layer += LayerStep; } if (fimg == null) { return(null); } RenderedPosition result = GetRenderedPosition(frame, fimg); result.Layer = layer; return(result); }
public RenderedPosition GetRenderedPosition(Frame frame, FrameImage fimg) { // Apply transforms AnimationTransform transform = frame.ApplyBoneTransforms(fimg, Transforms[CurrentAnimation]); RenderedPosition result = new RenderedPosition(); result.Positon = Vector2.Zero; result.Positon.Y = Position.Y + (transform.Position.Y * (FlipY ? -1 : 1)); result.Positon.X = Position.X + (transform.Position.X * (FlipX ? -1 : 1)); bool flipX = FlipX; bool flipY = FlipY; result.Angle = transform.Angle; if (flipX != flipY) { result.Angle *= -1; } result.Pivot = fimg.Pivot; if (flipX) { result.Pivot.X = Data.Textures[fimg.TextureFolder][fimg.TextureFile].Texture.Width - result.Pivot.X; } if (flipY) { result.Pivot.Y = Data.Textures[fimg.TextureFolder][fimg.TextureFile].Texture.Height - result.Pivot.Y; } result.Scale = transform.Scale; if (result.Scale.X < 0) { result.Scale.X = -result.Scale.X; flipX = !flipX; } if (result.Scale.Y < 0) { result.Scale.Y = -result.Scale.Y; flipY = !flipY; } result.Effects = SpriteEffects.None; if (flipX) { result.Effects |= SpriteEffects.FlipHorizontally; } if (flipY) { result.Effects |= SpriteEffects.FlipVertically; } return(result); }
public void Draw(SpriteBatch spriteBatch) { Frame frame = Data.Animations[CurrentAnimation].Frames[FrameIndex]; float layer = LayerStart; foreach (FrameImage ki in frame.Objects) { RenderedPosition pos = GetRenderedPosition(frame, ki); spriteBatch.Draw(Data.Textures[ki.TextureFolder][ki.TextureFile].Texture, pos.Positon, null, Color.White, pos.Angle, pos.Pivot, pos.Scale, pos.Effects, layer); layer += LayerStep; } }