Use TileSetRenderer in the editor.

This commit is contained in:
Paul Chote
2013-08-14 22:57:19 +12:00
parent 70580b27b9
commit 18759e01cf
3 changed files with 15 additions and 12 deletions

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Editor
{ {
// change the bits in the map // change the bits in the map
var template = surface.TileSet.Templates[brushTemplate.N]; var template = surface.TileSet.Templates[brushTemplate.N];
var tile = template.Data; var tile = surface.TileSetRenderer.Data(brushTemplate.N);
var pos = surface.GetBrushLocation(); var pos = surface.GetBrushLocation();
if (surface.GetModifiers() == Keys.Shift) if (surface.GetModifiers() == Keys.Shift)
@@ -42,7 +42,7 @@ namespace OpenRA.Editor
if (surface.Map.IsInMap(new CVec(u, v) + pos)) if (surface.Map.IsInMap(new CVec(u, v) + pos))
{ {
var z = u + v * template.Size.X; 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] = surface.Map.MapTiles.Value[u + pos.X, v + pos.Y] =
new TileReference<ushort, byte> new TileReference<ushort, byte>
{ {

View File

@@ -42,7 +42,7 @@ namespace OpenRA.Editor
tilePalette.ResumeLayout(); tilePalette.ResumeLayout();
actorPalette.ResumeLayout(); actorPalette.ResumeLayout();
resourcePalette.ResumeLayout(); resourcePalette.ResumeLayout();
surface1.Bind(null, null, null, null); surface1.Bind(null, null, null, null, null);
miniMapBox.Image = null; miniMapBox.Image = null;
currentMod = toolStripComboBox1.SelectedItem as string; currentMod = toolStripComboBox1.SelectedItem as string;
@@ -101,6 +101,7 @@ namespace OpenRA.Editor
string loadedMapName; string loadedMapName;
string currentMod = "ra"; string currentMod = "ra";
TileSet tileset; TileSet tileset;
TileSetRenderer tilesetRenderer;
bool dirty = false; bool dirty = false;
void LoadMap(string mapname) void LoadMap(string mapname)
@@ -144,6 +145,7 @@ namespace OpenRA.Editor
{ {
Rules.LoadRules(manifest, map); Rules.LoadRules(manifest, map);
tileset = Rules.TileSets[map.Tileset]; tileset = Rules.TileSets[map.Tileset];
tilesetRenderer = new TileSetRenderer(tileset, new Size(manifest.TileSize, manifest.TileSize));
tileset.LoadTiles(); tileset.LoadTiles();
var shadowIndex = new int[] { 3, 4 }; var shadowIndex = new int[] { 3, 4 };
var palette = new Palette(FileSystem.Open(tileset.Palette), shadowIndex); var palette = new Palette(FileSystem.Open(tileset.Palette), shadowIndex);
@@ -152,7 +154,7 @@ namespace OpenRA.Editor
var playerPalette = tileset.PlayerPalette ?? tileset.Palette; var playerPalette = tileset.PlayerPalette ?? tileset.Palette;
var shadowedPalette = new Palette(FileSystem.Open(playerPalette), shadowIndex); 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 // construct the palette of tiles
var palettes = new[] { tilePalette, actorPalette, resourcePalette }; var palettes = new[] { tilePalette, actorPalette, resourcePalette };
@@ -185,7 +187,7 @@ namespace OpenRA.Editor
{ {
try try
{ {
var bitmap = tileset.RenderTemplate((ushort)t.Key, palette); var bitmap = tilesetRenderer.RenderTemplate((ushort)t.Key, palette);
var ibox = new PictureBox var ibox = new PictureBox
{ {
Image = bitmap, 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) 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.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(); surface1.Invalidate();
@@ -519,8 +521,7 @@ namespace OpenRA.Editor
{ {
var tr = surface1.Map.MapTiles.Value[i, j]; var tr = surface1.Map.MapTiles.Value[i, j];
if (tr.type == 0xff || tr.type == 0xffff || tr.type == 1 || tr.type == 2) if (tr.type == 0xff || tr.type == 0xffff || tr.type == 1 || tr.type == 2)
tr.index = (byte)r.Next(0, tr.index = (byte)r.Next(0, surface1.TileSetRenderer.Data(tr.type).Count);
Rules.TileSets[surface1.Map.Tileset].Templates[tr.type].Data.TileBitmapBytes.Count);
surface1.Map.MapTiles.Value[i, j] = tr; surface1.Map.MapTiles.Value[i, j] = tr;
} }

View File

@@ -43,6 +43,7 @@ namespace OpenRA.Editor
{ {
public Map Map { get; private set; } public Map Map { get; private set; }
public TileSet TileSet { get; private set; } public TileSet TileSet { get; private set; }
public TileSetRenderer TileSetRenderer { get; private set; }
public Palette Palette { get; private set; } public Palette Palette { get; private set; }
public Palette PlayerPalette { get; private set; } public Palette PlayerPalette { get; private set; }
public int2 Offset; public int2 Offset;
@@ -79,10 +80,11 @@ namespace OpenRA.Editor
public Keys GetModifiers() { return ModifierKeys; } 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; Map = m;
TileSet = ts; TileSet = ts;
TileSetRenderer = tsr;
Palette = p; Palette = p;
PlayerPalette = pp; PlayerPalette = pp;
playerPalettes = null; playerPalettes = null;
@@ -270,9 +272,9 @@ namespace OpenRA.Editor
for (var j = 0; j < ChunkSize; j++) for (var j = 0; j < ChunkSize; j++)
{ {
var tr = Map.MapTiles.Value[u * ChunkSize + i, v * ChunkSize + j]; var tr = Map.MapTiles.Value[u * ChunkSize + i, v * ChunkSize + j];
var tile = TileSet.Templates[tr.type].Data; var tile = TileSetRenderer.Data(tr.type);
var index = (tr.index < tile.TileBitmapBytes.Count) ? tr.index : (byte)0; var index = (tr.index < tile.Count) ? tr.index : (byte)0;
var rawImage = tile.TileBitmapBytes[index]; var rawImage = tile[index];
for (var x = 0; x < TileSet.TileSize; x++) for (var x = 0; x < TileSet.TileSize; x++)
for (var y = 0; y < TileSet.TileSize; y++) 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(); p[(j * TileSet.TileSize + y) * stride + i * TileSet.TileSize + x] = Palette.GetColor(rawImage[x + TileSet.TileSize * y]).ToArgb();