예제 #1
0
        public void RecalculateTarget()
        {
            ZoomFrame = 3 - (int)LastZoom;

            if (Texture != null)
            {
                Texture.Dispose();
            }

            if (DrawSkill)
            {
                Texture = new RenderTarget2D(GameFacade.GraphicsDevice, 160, 49);
                return;
            }

            if (Sprite != null)
            {
                SPRFrame bigFrame = (BGSprite != null) ? BGSprite.Frames[ZoomFrame] : Sprite.Frames[ZoomFrame];
                Texture = new RenderTarget2D(GameFacade.GraphicsDevice, Math.Max(1, bigFrame.Width), Math.Max(1, bigFrame.Height));
            }
            else if (Headline.Operand.Group == VMSetBalloonHeadlineOperandGroup.Algorithmic && LastZoom != WorldZoom.Far)
            {
                AlgTex = (Headline.IconTarget == null)?WhitePx:Headline.IconTarget.GetIcon(GameFacade.GraphicsDevice, (int)LastZoom - 1);
                Point bigFrame = (BGSprite != null) ? new Point(BGSprite.Frames[ZoomFrame].Width, BGSprite.Frames[ZoomFrame].Height) : new Point(AlgTex.Width, AlgTex.Height);
                Texture = new RenderTarget2D(GameFacade.GraphicsDevice, bigFrame.X, bigFrame.Y);
            }
            else
            {
                AlgTex = null;
            }
            Invalidated = true;
        }
예제 #2
0
        private static ISpriteFrame[] ParseFrames(BinaryReader reader, int numFrames, bool isCompressed)
        {
            var frames = new SPRFrame[numFrames];

            for (var i = 0; i < numFrames; i++)
            {
                var width   = reader.ReadUInt16();
                var height  = reader.ReadUInt16();
                var offsetX = reader.ReadUInt16();
                var offsetY = reader.ReadUInt16();

                frames[i] = new SPRFrame
                {
                    FrameSize = new Size(width, height),
                    Size      = new Size(width, height),
                    Offset    = new float2(offsetX, offsetY),
                    Data      = new byte[width * height]
                };
            }

            for (var i = 0; i < numFrames; i++)
            {
                if (!isCompressed)
                {
                    frames[i].Data = reader.ReadBytes(frames[i].Size.Width * frames[i].Size.Height);
                }
                else
                {
                    var compressedSize = reader.ReadUInt32();
                    var writeOffset    = 0;

                    for (var readOffset = 0; readOffset < compressedSize; readOffset++)
                    {
                        var compression = reader.ReadByte();
                        var isEmpty     = (compression & 0b10000000) != 0;
                        var numPixels   = compression & 0b01111111;

                        if (isEmpty)
                        {
                            writeOffset += 128 - numPixels;
                        }
                        else
                        {
                            numPixels  += 1;
                            readOffset += numPixels;

                            for (var k = 0; k < numPixels; k++)
                            {
                                frames[i].Data[writeOffset++] = reader.ReadByte();
                            }
                        }
                    }
                }
            }

            return(frames);
        }
예제 #3
0
        private string ExportSpriteFrame(SPRFrame frame)
        {
            var texture = frame.GetTexture(this.Gd);

            var temp = Path.GetTempFileName();

            texture.Save(temp, ImageFileFormat.Png);

            var hash     = FileUtils.ComputeMD5(temp);
            var filename = id + "_files/" + hash + ".png";
            var newDest  = Path.Combine(dir, filename);

            if (File.Exists(newDest))
            {
                File.Delete(temp);
            }
            else
            {
                File.Move(temp, newDest);
            }

            return(filename);
        }
예제 #4
0
        private string ExportSpriteFrame(SPRFrame frame)
        {
            var texture = frame.GetTexture(this.Gd);

            var temp = Path.GetTempFileName();

            texture.SaveAsPng(new FileStream(temp, FileMode.OpenOrCreate), texture.Width, texture.Height);

            var hash     = FileUtils.ComputeMD5(temp);
            var filename = id + "_files/" + hash + ".png";
            var newDest  = Path.Combine(dir, filename);

            if (File.Exists(newDest))
            {
                File.Delete(temp);
            }
            else
            {
                File.Move(temp, newDest);
            }

            return(filename);
        }
예제 #5
0
 public void AddSprite(SPR Sprite)
 {
     m_Sprite = Sprite;
     m_Frame  = (SPRFrame)m_Sprite.GetFrame(0); //Floors only have 1 frame.
 }