MakeTiles: allow non-integer tile names; generate an idx file

This commit is contained in:
Jason Long 2014-06-16 20:26:17 -04:00
parent 0bf95f4b19
commit bff42f0cf9

View file

@ -9,6 +9,8 @@ import java.util.*;
import javax.imageio.*; import javax.imageio.*;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import static micropolisj.engine.TileSpec.generateTileNames;
public class MakeTiles public class MakeTiles
{ {
static HashMap<String,String> tileData = new HashMap<String,String>(); static HashMap<String,String> tileData = new HashMap<String,String>();
@ -16,7 +18,7 @@ public class MakeTiles
static final Charset UTF8 = Charset.forName("UTF-8"); static final Charset UTF8 = Charset.forName("UTF-8");
static int SKIP_TILES = 0; static int SKIP_TILES = 0;
static int NTILES = 960; static int COUNT_TILES = -1;
static int TILE_SIZE = 16; static int TILE_SIZE = 16;
public static void main(String [] args) public static void main(String [] args)
@ -33,7 +35,7 @@ public class MakeTiles
SKIP_TILES = Integer.parseInt(System.getProperty("skip_tiles")); SKIP_TILES = Integer.parseInt(System.getProperty("skip_tiles"));
} }
if (System.getProperty("tile_count") != null) { if (System.getProperty("tile_count") != null) {
NTILES = Integer.parseInt(System.getProperty("tile_count")); COUNT_TILES = Integer.parseInt(System.getProperty("tile_count"));
} }
File recipeFile = new File(args[0]); File recipeFile = new File(args[0]);
@ -52,18 +54,24 @@ public class MakeTiles
UTF8 UTF8
)); ));
// count number of images
String [] tileNames = generateTileNames(recipe);
int ntiles = COUNT_TILES == -1 ? tileNames.length : COUNT_TILES;
// actually assemble the image // actually assemble the image
BufferedImage buf = new BufferedImage(TILE_SIZE,TILE_SIZE*NTILES,BufferedImage.TYPE_INT_RGB); BufferedImage buf = new BufferedImage(TILE_SIZE,TILE_SIZE*ntiles,BufferedImage.TYPE_INT_RGB);
Graphics2D gr = buf.createGraphics(); Graphics2D gr = buf.createGraphics();
for (int i = 0; i < NTILES; i++) { for (int i = 0; i < ntiles; i++) {
int tileNumber = SKIP_TILES + i; int tileNumber = SKIP_TILES + i;
String tileName = Integer.toString(tileNumber); if (!(tileNumber >= 0 && tileNumber < tileNames.length)) {
String rawSpec = recipe.getProperty(tileName);
if (rawSpec == null) {
continue; continue;
} }
String tileName = tileNames[tileNumber];
String rawSpec = recipe.getProperty(tileName);
assert rawSpec != null;
TileSpec tileSpec = TileSpec.parse(tileNumber, tileName, rawSpec, recipe); TileSpec tileSpec = TileSpec.parse(tileNumber, tileName, rawSpec, recipe);
FrameSpec ref = parseFrameSpec(tileSpec); FrameSpec ref = parseFrameSpec(tileSpec);
if (ref == null) { if (ref == null) {
@ -76,6 +84,22 @@ public class MakeTiles
System.out.println("Generating tiles array: "+outputFile); System.out.println("Generating tiles array: "+outputFile);
ImageIO.write(buf, "png", outputFile); ImageIO.write(buf, "png", outputFile);
File indexFile = new File("tiles.idx");
System.out.println("Generating tiles index: "+indexFile);
writeIndexFile(tileNames, indexFile);
}
static void writeIndexFile(String [] tileNames, File indexFile)
throws IOException
{
PrintWriter out = new PrintWriter(
new FileWriter(indexFile)
);
for (int i = 0; i < tileNames.length; i++) {
out.printf("%s %d\n", tileNames[i], i);
}
out.close();
} }
static void drawTo(FrameSpec ref, Graphics2D gr, int destX, int destY) static void drawTo(FrameSpec ref, Graphics2D gr, int destX, int destY)