コード例 #1
0
ファイル: TileFileTests.cs プロジェクト: dev-osrose/Revise
        public void TestSaveMethod()
        {
            TileFile tileFile = new TileFile();

            tileFile.Load(TEST_FILE);

            MemoryStream savedStream = new MemoryStream();

            tileFile.Save(savedStream);

            savedStream.Seek(0, SeekOrigin.Begin);

            TileFile savedTileFile = new TileFile();

            savedTileFile.Load(savedStream);

            savedStream.Close();

            Assert.AreEqual(tileFile.Width, savedTileFile.Width, "Width values do not match");
            Assert.AreEqual(tileFile.Height, savedTileFile.Height, "Height values do not match");

            for (int x = 0; x < tileFile.Height; x++)
            {
                for (int y = 0; y < tileFile.Width; y++)
                {
                    Assert.AreEqual(tileFile[x, y].Brush, savedTileFile[x, y].Brush, "Brush values do not match");
                    Assert.AreEqual(tileFile[x, y].TileIndex, savedTileFile[x, y].TileIndex, "Tile index values do not match");
                    Assert.AreEqual(tileFile[x, y].TileSet, savedTileFile[x, y].TileSet, "Tile set values do not match");
                    Assert.AreEqual(tileFile[x, y].Tile, savedTileFile[x, y].Tile, "Tile values do not match");
                }
            }
        }
コード例 #2
0
        public UITileFileItem(TileFile tiles, int idx)
        {
            Index = idx;
            file  = tiles;

            this.Width.Set(120f, 0f);
            this.Height.Set(150f, 0f);
            this.CornerSize  = new Vector2(8, 8);
            base.MainTexture = TemplateMod.ModTexturesTable["AdvInvBack1"];
            this.Color       = Color.Cyan * 0.8f;
            base.SetPadding(6f);
            this.OverflowHidden = true;

            fileNameText              = new UIText(tiles.FileName);
            fileNameText.VAlign       = 1f;
            fileNameText.HAlign       = 0.5f;
            fileNameText.MarginBottom = 2f;
            Append(fileNameText);

            tilePanel = new UIAdvPanel(TemplateMod.ModTexturesTable["AdvInvBack1"]);
            tilePanel.Width.Set(115f, 0f);
            tilePanel.Height.Set(115f, 0f);
            tilePanel.HAlign = 0.5f;
            tilePanel.VAlign = 0f;
            Append(tilePanel);
        }
コード例 #3
0
        private void SaveButton_OnClick(UIMouseEvent evt, UIElement listeningElement)
        {
            int w = TemplateMod.SelectLowerRight.X - TemplateMod.SelectUpperLeft.X + 1;
            int h = TemplateMod.SelectLowerRight.Y - TemplateMod.SelectUpperLeft.Y + 1;

            if (!TemplateMod.SelectMode || w <= 0 || h <= 0)
            {
                Main.NewText("错误:你没有选择任何有效的区域");
                return;
            }
            // 设置区域上限为百万面积
            if (w > 2000 || h > 2000 || w * h > 10e6)
            {
                Main.NewText("错误:选择的区域过大");
                return;
            }
            TileFile file = new TileFile(w, h);

            for (int i = TemplateMod.SelectUpperLeft.X; i <= TemplateMod.SelectLowerRight.X; i++)
            {
                for (int j = TemplateMod.SelectUpperLeft.Y; j <= TemplateMod.SelectLowerRight.Y; j++)
                {
                    file.SetTile(i - TemplateMod.SelectUpperLeft.X, j - TemplateMod.SelectUpperLeft.Y, Main.tile[i, j]);
                }
            }
            TemplateMod.Instance.TileFileManager.AddAndSave(file);
            RefreshFiles();
        }
コード例 #4
0
        internal Texture2D MakeThumbnail(TileFile tileInfo)
        {
            int     desiredWidth  = 100;
            int     desiredHeight = 100;
            int     actualWidth   = tileInfo.Width * 16;
            int     actualHeight  = tileInfo.Height * 16;
            float   scale         = 1f;
            Vector2 offset        = default(Vector2);

            if (actualWidth > desiredWidth || actualHeight > desiredHeight)
            {
                if (actualHeight > actualWidth)
                {
                    scale    = (float)desiredWidth / (float)actualHeight;
                    offset.X = ((float)desiredWidth - (float)actualWidth * scale) / 2f;
                }
                else
                {
                    scale    = (float)desiredWidth / (float)actualWidth;
                    offset.Y = ((float)desiredHeight - (float)actualHeight * scale) / 2f;
                }
            }
            offset /= scale;
            RenderTarget2D renderTarget = new RenderTarget2D(Main.graphics.GraphicsDevice, desiredWidth, desiredHeight);

            Main.instance.GraphicsDevice.SetRenderTarget(renderTarget);
            Main.instance.GraphicsDevice.Clear(Color.Transparent);
            Main.spriteBatch.Begin();
            DrawPreview(Main.spriteBatch, tileInfo.TileBlocks, offset, scale);
            Main.spriteBatch.End();
            Main.instance.GraphicsDevice.SetRenderTarget(null);
            Texture2D mergedTexture = new Texture2D(Main.instance.GraphicsDevice, desiredWidth, desiredHeight);

            Color[] content = new Color[desiredWidth * desiredHeight];
            renderTarget.GetData <Color>(content);
            mergedTexture.SetData <Color>(content);
            return(mergedTexture);
        }
コード例 #5
0
ファイル: TileFileTests.cs プロジェクト: dev-osrose/Revise
        public void TestLoadMethod()
        {
            const int HEIGHT = 16;
            const int WIDTH  = 16;

            Stream stream = File.OpenRead(TEST_FILE);

            stream.Seek(0, SeekOrigin.End);
            long fileSize = stream.Position;

            stream.Seek(0, SeekOrigin.Begin);

            TileFile tileFile = new TileFile();

            tileFile.Load(stream);

            long streamPosition = stream.Position;

            stream.Close();

            Assert.AreEqual(fileSize, streamPosition, "Not all of the file was read");
            Assert.AreEqual(WIDTH, tileFile.Width, "Incorrect width");
            Assert.AreEqual(HEIGHT, tileFile.Height, "Incorrect height");
        }