Use TileSetRenderer in the editor.
This commit is contained in:
@@ -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>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user