diff --git a/OpenRA.Editor/BrushTool.cs b/OpenRA.Editor/BrushTool.cs index c940252a59..d71aa470cc 100644 --- a/OpenRA.Editor/BrushTool.cs +++ b/OpenRA.Editor/BrushTool.cs @@ -27,7 +27,7 @@ namespace OpenRA.Editor { // change the bits in the map var template = surface.TileSet.Templates[brushTemplate.N]; - var tile = template.Data; + var tile = surface.TileSetRenderer.Data(brushTemplate.N); var pos = surface.GetBrushLocation(); if (surface.GetModifiers() == Keys.Shift) @@ -42,7 +42,7 @@ namespace OpenRA.Editor if (surface.Map.IsInMap(new CVec(u, v) + pos)) { var z = u + v * template.Size.X; - if (tile.TileBitmapBytes[z] != null) + if (tile[z] != null) surface.Map.MapTiles.Value[u + pos.X, v + pos.Y] = new TileReference { diff --git a/OpenRA.Editor/Form1.cs b/OpenRA.Editor/Form1.cs index 2efa448bf1..c94da5686a 100755 --- a/OpenRA.Editor/Form1.cs +++ b/OpenRA.Editor/Form1.cs @@ -42,7 +42,7 @@ namespace OpenRA.Editor tilePalette.ResumeLayout(); actorPalette.ResumeLayout(); resourcePalette.ResumeLayout(); - surface1.Bind(null, null, null, null); + surface1.Bind(null, null, null, null, null); miniMapBox.Image = null; currentMod = toolStripComboBox1.SelectedItem as string; @@ -101,6 +101,7 @@ namespace OpenRA.Editor string loadedMapName; string currentMod = "ra"; TileSet tileset; + TileSetRenderer tilesetRenderer; bool dirty = false; void LoadMap(string mapname) @@ -144,6 +145,7 @@ namespace OpenRA.Editor { Rules.LoadRules(manifest, map); tileset = Rules.TileSets[map.Tileset]; + tilesetRenderer = new TileSetRenderer(tileset, new Size(manifest.TileSize, manifest.TileSize)); tileset.LoadTiles(); var shadowIndex = new int[] { 3, 4 }; var palette = new Palette(FileSystem.Open(tileset.Palette), shadowIndex); @@ -152,7 +154,7 @@ namespace OpenRA.Editor var playerPalette = tileset.PlayerPalette ?? tileset.Palette; var shadowedPalette = new Palette(FileSystem.Open(playerPalette), shadowIndex); - surface1.Bind(map, tileset, palette, shadowedPalette); + surface1.Bind(map, tileset, tilesetRenderer, palette, shadowedPalette); // construct the palette of tiles var palettes = new[] { tilePalette, actorPalette, resourcePalette }; @@ -185,7 +187,7 @@ namespace OpenRA.Editor { try { - var bitmap = tileset.RenderTemplate((ushort)t.Key, palette); + var bitmap = tilesetRenderer.RenderTemplate((ushort)t.Key, palette); var ibox = new PictureBox { Image = bitmap, @@ -329,7 +331,7 @@ namespace OpenRA.Editor if ((int)rd.MapWidth.Value != surface1.Map.MapSize.X || (int)rd.MapHeight.Value != surface1.Map.MapSize.Y) { surface1.Map.Resize((int)rd.MapWidth.Value, (int)rd.MapHeight.Value); - surface1.Bind(surface1.Map, surface1.TileSet, surface1.Palette, surface1.PlayerPalette); // rebind it to invalidate all caches + surface1.Bind(surface1.Map, surface1.TileSet, surface1.TileSetRenderer, surface1.Palette, surface1.PlayerPalette); // rebind it to invalidate all caches } surface1.Invalidate(); @@ -519,8 +521,7 @@ namespace OpenRA.Editor { var tr = surface1.Map.MapTiles.Value[i, j]; if (tr.type == 0xff || tr.type == 0xffff || tr.type == 1 || tr.type == 2) - tr.index = (byte)r.Next(0, - Rules.TileSets[surface1.Map.Tileset].Templates[tr.type].Data.TileBitmapBytes.Count); + tr.index = (byte)r.Next(0, surface1.TileSetRenderer.Data(tr.type).Count); surface1.Map.MapTiles.Value[i, j] = tr; } diff --git a/OpenRA.Editor/Surface.cs b/OpenRA.Editor/Surface.cs index 933f525998..ca0f8cd5e0 100755 --- a/OpenRA.Editor/Surface.cs +++ b/OpenRA.Editor/Surface.cs @@ -43,6 +43,7 @@ namespace OpenRA.Editor { public Map Map { get; private set; } public TileSet TileSet { get; private set; } + public TileSetRenderer TileSetRenderer { get; private set; } public Palette Palette { get; private set; } public Palette PlayerPalette { get; private set; } public int2 Offset; @@ -79,10 +80,11 @@ namespace OpenRA.Editor public Keys GetModifiers() { return ModifierKeys; } - public void Bind(Map m, TileSet ts, Palette p, Palette pp) + public void Bind(Map m, TileSet ts, TileSetRenderer tsr, Palette p, Palette pp) { Map = m; TileSet = ts; + TileSetRenderer = tsr; Palette = p; PlayerPalette = pp; playerPalettes = null; @@ -270,9 +272,9 @@ namespace OpenRA.Editor for (var j = 0; j < ChunkSize; j++) { var tr = Map.MapTiles.Value[u * ChunkSize + i, v * ChunkSize + j]; - var tile = TileSet.Templates[tr.type].Data; - var index = (tr.index < tile.TileBitmapBytes.Count) ? tr.index : (byte)0; - var rawImage = tile.TileBitmapBytes[index]; + var tile = TileSetRenderer.Data(tr.type); + var index = (tr.index < tile.Count) ? tr.index : (byte)0; + var rawImage = tile[index]; for (var x = 0; x < TileSet.TileSize; x++) for (var y = 0; y < TileSet.TileSize; y++) p[(j * TileSet.TileSize + y) * stride + i * TileSet.TileSize + x] = Palette.GetColor(rawImage[x + TileSet.TileSize * y]).ToArgb();