Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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;
            }
        }