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"); } } }
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); }
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(); }
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); }
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"); }