Ejemplo n.º 1
0
        public void RenderToTarget(GraphicsDevice device)
        {
            if (!HasRendered && CurrentFrames.Count > 0)
            {
                device.SetRenderTarget(Target);
                device.Clear(ClearOptions.Target, Color.Transparent, 1.0f, 0);
                DwarfGame.SafeSpriteBatchBegin(SpriteSortMode.Immediate, BlendState.NonPremultiplied, SamplerState.PointClamp,
                                               DepthStencilState.None, RasterizerState.CullNone, null, Matrix.Identity);
                foreach (KeyValuePair <CompositeFrame, Point> framePair in CurrentFrames)
                {
                    CompositeFrame         frame         = framePair.Key;
                    Point                  currentOffset = framePair.Value;
                    List <NamedImageFrame> images        = frame.GetFrames();

                    for (int i = 0; i < images.Count; i++)
                    {
                        int y = FrameSize.Y - images[i].SourceRect.Height;
                        int x = (FrameSize.X / 2) - images[i].SourceRect.Width / 2;
                        DwarfGame.SpriteBatch.Draw(images[i].Image,
                                                   new Rectangle(currentOffset.X * FrameSize.X + x, currentOffset.Y * FrameSize.Y + y,
                                                                 images[i].SourceRect.Width, images[i].SourceRect.Height), images[i].SourceRect,
                                                   frame.Cells[i].Tint);
                    }
                }
                DwarfGame.SpriteBatch.End();
                device.SetRenderTarget(null);
                HasRendered = true;
            }
        }
Ejemplo n.º 2
0
            public void RenderToTarget(GraphicsDevice device, IEnumerable <KeyValuePair <CompositeFrame, FrameID> > currentFrames)
            {
                if (HasChanged)
                {
                    if (Target == null || Target.IsDisposed || Target.GraphicsDevice.IsDisposed)
                    {
                        return;
                    }
                    device.SetRenderTarget(Target);
                    device.Clear(ClearOptions.Target, Color.Transparent, 1.0f, 0);
                    try
                    {
                        DwarfGame.SafeSpriteBatchBegin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.PointClamp,
                                                       DepthStencilState.None, RasterizerState.CullNone, null, Matrix.Identity);
                        foreach (KeyValuePair <CompositeFrame, FrameID> framePair in currentFrames)
                        {
                            CompositeFrame frame         = framePair.Key;
                            FrameID        currentOffset = framePair.Value;

                            List <NamedImageFrame> images = frame.GetFrames();

                            for (int i = 0; i < images.Count; i++)
                            {
                                int y = FrameSize.Y - images[i].SourceRect.Height;
                                int x = (FrameSize.X / 2) - images[i].SourceRect.Width / 2;
                                DwarfGame.SpriteBatch.Draw(images[i].Image,
                                                           new Rectangle(currentOffset.Offset.X * FrameSize.X + x,
                                                                         currentOffset.Offset.Y * FrameSize.Y + y,
                                                                         images[i].SourceRect.Width,
                                                                         images[i].SourceRect.Height),
                                                           images[i].SourceRect,
                                                           frame.Cells[i].Tint);
                            }
                        }
                    }
                    finally
                    {
                        DwarfGame.SpriteBatch.End();
                    }
                    device.SetRenderTarget(null);
                    HasRendered = true;
                    HasChanged  = false;
                }
            }