Export tilesets into a mix

This commit is contained in:
Paul Chote
2010-07-17 19:03:05 +12:00
parent 04758bacde
commit 6427a6dc33

View File

@@ -107,6 +107,7 @@ namespace OpenRA.TilesetBuilder
// Create a Tileset definition // Create a Tileset definition
// Todo: Pull this info from the gui // Todo: Pull this info from the gui
var tilesetFile = "tileset-arrakis.yaml"; var tilesetFile = "tileset-arrakis.yaml";
var mixFile = "arrakis.mix";
var tileset = new TileSet() var tileset = new TileSet()
{ {
Name = "Arrakis", Name = "Arrakis",
@@ -115,13 +116,16 @@ namespace OpenRA.TilesetBuilder
Extensions = new string[] {".arr", ".shp"} Extensions = new string[] {".arr", ".shp"}
}; };
// export palette (use the embedded palette) // List of files to add to the mix file
List<string> fileList = new List<string>();
// Export palette (use the embedded palette)
var p = surface1.Image.Palette.Entries.ToList(); var p = surface1.Image.Palette.Entries.ToList();
ExportPalette(p, Path.Combine(dir, tileset.Palette)); fileList.Add(ExportPalette(p, Path.Combine(dir, tileset.Palette)));
// Export tile artwork // Export tile artwork
foreach (var t in surface1.Templates) foreach (var t in surface1.Templates)
ExportTemplate(t, surface1.Templates.IndexOf(t), tileset.Extensions.First(), dir); fileList.Add(ExportTemplate(t, surface1.Templates.IndexOf(t), tileset.Extensions.First(), dir));
// Add the terraintypes // Add the terraintypes
// Todo: add support for multiple/different terraintypes // Todo: add support for multiple/different terraintypes
@@ -156,17 +160,24 @@ namespace OpenRA.TilesetBuilder
} }
tileset.Save(Path.Combine(dir, tilesetFile)); tileset.Save(Path.Combine(dir, tilesetFile));
Package.CreateMix(Path.Combine(dir, mixFile),fileList);
// Cleanup
foreach (var file in fileList)
File.Delete(file);
System.Console.WriteLine("Finished export"); System.Console.WriteLine("Finished export");
} }
void ExportPalette(List<Color> p, string file) string ExportPalette(List<Color> p, string file)
{ {
while (p.Count < 256) p.Add(Color.Black); // pad the palette out with extra blacks while (p.Count < 256) p.Add(Color.Black); // pad the palette out with extra blacks
var paletteData = p.Take(256).SelectMany(c => new byte[] { (byte)(c.R >> 2), (byte)(c.G >> 2), (byte)(c.B >> 2) }).ToArray(); var paletteData = p.Take(256).SelectMany(c => new byte[] { (byte)(c.R >> 2), (byte)(c.G >> 2), (byte)(c.B >> 2) }).ToArray();
File.WriteAllBytes(file, paletteData); File.WriteAllBytes(file, paletteData);
return file;
} }
void ExportTemplate(Template t, int n, string suffix, string dir) string ExportTemplate(Template t, int n, string suffix, string dir)
{ {
var filename = Path.Combine(dir, "t{0:00}{1}".F(n, suffix)); var filename = Path.Combine(dir, "t{0:00}{1}".F(n, suffix));
var totalTiles = t.Width * t.Height; var totalTiles = t.Width * t.Height;
@@ -243,6 +254,8 @@ namespace OpenRA.TilesetBuilder
File.WriteAllBytes(filename, bytes); File.WriteAllBytes(filename, bytes);
} }
return filename;
} }
} }