Add some usability features to the TilesetBuilder

- title bar shows tile position (x, y and tile nr (from left top))
 - make 'overlays' button a toggle button and properly sync state with
   tileset surface
 - add export option for 'Template CellID <-> tile number' mapping
 - overlay pen color is now white (todo: make configurable)
This commit is contained in:
ew07002
2012-07-21 19:00:03 +02:00
committed by Chris Forbes
parent eae482d413
commit d1f12ff801
3 changed files with 84 additions and 19 deletions

View File

@@ -65,6 +65,7 @@ namespace OpenRA.TilesetBuilder
}
surface1.Image = (Bitmap)rbitmap;
surface1.TilesPerRow = surface1.Image.Size.Width / surface1.TileSize;
surface1.Image.SetResolution(96, 96); // people keep being noobs about DPI, and GDI+ cares.
surface1.TerrainTypes = new int[surface1.Image.Width / size, surface1.Image.Height / size]; /* all passable by default */
surface1.Templates = new List<Template>();
@@ -86,6 +87,13 @@ namespace OpenRA.TilesetBuilder
int i = 0;
surface1.icon = new Bitmap[DefTerrain.Keys.Count];
TerrainType = new TerrainTypeInfo[DefTerrain.Keys.Count];
var title = this.Text;
surface1.UpdateMouseTilePosition += (x, y, tileNr) =>
{
this.Text = "{0} - {1} ({2,3}, {3,3}) tileNr: {4,3}".F(title, txtTilesetName.Text, x, y, tileNr);
};
surface1.Enabled = false;
foreach (var deftype in DefTerrain)
{
@@ -107,6 +115,7 @@ namespace OpenRA.TilesetBuilder
TerrainTypeButton.ToolTipText = deftype.Key;
TerrainTypeButton.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
TerrainTypeButton.Tag = i.ToString();
TerrainTypeButton.ImageAlign = ContentAlignment.MiddleLeft;
i++;
tsTerrainTypes.Items.Add(TerrainTypeButton);
}
@@ -117,6 +126,7 @@ namespace OpenRA.TilesetBuilder
this.size = size;
surface1.TileSize = size;
surface1.Image = (Bitmap)Image.FromFile(src);
surface1.TilesPerRow = surface1.Image.Size.Width / surface1.TileSize;
surface1.Image.SetResolution(96, 96); // people keep being noobs about DPI, and GDI+ cares.
surface1.TerrainTypes = new int[surface1.Image.Width / size, surface1.Image.Height / size]; /* all passable by default */
surface1.Templates = new List<Template>();
@@ -219,16 +229,8 @@ namespace OpenRA.TilesetBuilder
void SaveClicked(object sender, EventArgs e) { Save(); }
void ShowOverlaysClicked(object sender, EventArgs e)
{
if (surface1.ShowTerrainTypes == false)
{
surface1.ShowTerrainTypes = true;
this.Refresh();
}
else
{
surface1.ShowTerrainTypes = false;
this.Refresh();
}
surface1.ShowTerrainTypes = (sender as ToolStripButton).Checked;
surface1.Invalidate();
}
void ExportClicked(object sender, EventArgs e)
@@ -236,6 +238,11 @@ namespace OpenRA.TilesetBuilder
Export("Tilesets");
}
void Export2Clicked(object sender, EventArgs e)
{
ExportTemplateToTileNumberMapping();
}
string ExportPalette(List<Color> p, string file)
{
while (p.Count < 256) p.Add(Color.Black); // pad the palette out with extra blacks
@@ -401,7 +408,8 @@ namespace OpenRA.TilesetBuilder
{
string ttype = "Clear";
ttype = TerrainType[surface1.TerrainTypes[t.Key.X, t.Key.Y]].Type;
template.Tiles.Add((byte)((t.Key.X - tp.Left) + tp.Width * (t.Key.Y - tp.Top)), ttype);
var idx = ((t.Key.X - tp.Left) + tp.Width * (t.Key.Y - tp.Top));
template.Tiles.Add((byte)idx, ttype);
}
tileset.Templates.Add(cur, template);
@@ -417,8 +425,38 @@ namespace OpenRA.TilesetBuilder
//File.Delete(file);
Console.WriteLine("Finished export");
}
public void ExportTemplateToTileNumberMapping()
{
Console.WriteLine("# start");
Console.WriteLine("# TemplateID CellID tilenr TemplateW TemplateH XinTilesPNG YinTilesPNG");
ushort cur = 0;
foreach (var tp in surface1.Templates)
{
foreach (var t in tp.Cells)
{
var idx = ((t.Key.X - tp.Left) + tp.Width * (t.Key.Y - tp.Top));
// TemplateID CellID tilenr TemplateW TemplateH XinTilesPNG YinTilesPNG
Console.WriteLine("{0} {1} {2} {3} {4} {5} {6}",
cur,
idx,
((t.Key.Y * surface1.TilesPerRow) + t.Key.X).ToString(),
tp.Width,
tp.Height,
t.Key.X,
t.Key.Y
);
}
cur++;
}
Console.WriteLine("# end\n");
}
private void toolStripContainer1_TopToolStripPanel_Click(object sender, EventArgs e)
{
@@ -452,6 +490,5 @@ namespace OpenRA.TilesetBuilder
{
CreateNewTileset();
}
}
}