MakeTiles: refactor: paving the way to allow multiple images per tile
This commit is contained in:
parent
d5dbd8dc64
commit
de82160792
1 changed files with 44 additions and 11 deletions
|
@ -46,6 +46,18 @@ public class MakeTiles
|
||||||
generateFromRecipe(recipeFile, outputDir);
|
generateFromRecipe(recipeFile, outputDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class TileMapping {
|
||||||
|
String tileName;
|
||||||
|
TileImage ref;
|
||||||
|
TileImage dest;
|
||||||
|
|
||||||
|
TileMapping(String tileName, TileImage ref, TileImage dest) {
|
||||||
|
this.tileName = tileName;
|
||||||
|
this.ref = ref;
|
||||||
|
this.dest = dest;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void generateFromRecipe(File recipeFile, File outputDir)
|
static void generateFromRecipe(File recipeFile, File outputDir)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
|
@ -60,9 +72,9 @@ public class MakeTiles
|
||||||
String [] tileNames = generateTileNames(recipe);
|
String [] tileNames = generateTileNames(recipe);
|
||||||
int ntiles = COUNT_TILES == -1 ? tileNames.length : COUNT_TILES;
|
int ntiles = COUNT_TILES == -1 ? tileNames.length : COUNT_TILES;
|
||||||
|
|
||||||
// actually assemble the image
|
// prepare mapping data
|
||||||
BufferedImage buf = new BufferedImage(TILE_SIZE,TILE_SIZE*ntiles,BufferedImage.TYPE_INT_RGB);
|
int nextOffsetY = 0;
|
||||||
Graphics2D gr = buf.createGraphics();
|
ArrayList<TileMapping> mappings = new ArrayList<TileMapping>();
|
||||||
|
|
||||||
for (int i = 0; i < ntiles; i++) {
|
for (int i = 0; i < ntiles; i++) {
|
||||||
int tileNumber = SKIP_TILES + i;
|
int tileNumber = SKIP_TILES + i;
|
||||||
|
@ -81,7 +93,22 @@ public class MakeTiles
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ref.drawTo(gr, 0, TILE_SIZE*i, 0, 0);
|
TileImageSprite dest = new TileImageSprite();
|
||||||
|
dest.offsetY = nextOffsetY;
|
||||||
|
nextOffsetY += TILE_SIZE;
|
||||||
|
|
||||||
|
TileMapping m = new TileMapping(tileName, ref, dest);
|
||||||
|
mappings.add(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
// actually assemble the image
|
||||||
|
BufferedImage buf = new BufferedImage(TILE_SIZE,nextOffsetY,BufferedImage.TYPE_INT_RGB);
|
||||||
|
Graphics2D gr = buf.createGraphics();
|
||||||
|
|
||||||
|
for (TileMapping m : mappings) {
|
||||||
|
|
||||||
|
TileImageSprite sprite = (TileImageSprite) m.dest;
|
||||||
|
m.ref.drawTo(gr, sprite.offsetX, sprite.offsetY, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// make parent directories if necessary
|
// make parent directories if necessary
|
||||||
|
@ -96,10 +123,10 @@ public class MakeTiles
|
||||||
// the composed tile array
|
// the composed tile array
|
||||||
File indexFile = new File(outputDir, "tiles.idx");
|
File indexFile = new File(outputDir, "tiles.idx");
|
||||||
System.out.println("Generating tiles index: "+indexFile);
|
System.out.println("Generating tiles index: "+indexFile);
|
||||||
writeIndexFile(tileNames, indexFile);
|
writeIndexFile(mappings, indexFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void writeIndexFile(String [] tileNames, File indexFile)
|
static void writeIndexFile(Collection<TileMapping> mappings, File indexFile)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
@ -108,12 +135,18 @@ public class MakeTiles
|
||||||
XMLStreamWriter out = XMLOutputFactory.newInstance().createXMLStreamWriter(outStream, "UTF-8");
|
XMLStreamWriter out = XMLOutputFactory.newInstance().createXMLStreamWriter(outStream, "UTF-8");
|
||||||
out.writeStartDocument();
|
out.writeStartDocument();
|
||||||
out.writeStartElement("micropolis-tiles-index");
|
out.writeStartElement("micropolis-tiles-index");
|
||||||
for (int i = 0; i < tileNames.length; i++) {
|
for (TileMapping m : mappings) {
|
||||||
out.writeStartElement("tile");
|
out.writeStartElement("tile");
|
||||||
out.writeAttribute("name", tileNames[i]);
|
out.writeAttribute("name", m.tileName);
|
||||||
out.writeStartElement("image");
|
|
||||||
out.writeAttribute("offsetY", Integer.toString(i));
|
{ //assume it is a simple sprite
|
||||||
out.writeEndElement();
|
|
||||||
|
TileImageSprite s = (TileImageSprite ) m.dest;
|
||||||
|
out.writeStartElement("image");
|
||||||
|
out.writeAttribute("offsetY", Integer.toString(s.offsetY / TILE_SIZE));
|
||||||
|
out.writeEndElement();
|
||||||
|
}
|
||||||
|
|
||||||
out.writeEndElement();
|
out.writeEndElement();
|
||||||
}
|
}
|
||||||
out.writeEndElement();
|
out.writeEndElement();
|
||||||
|
|
Reference in a new issue