tiles: add name property to spec

This commit is contained in:
Jason Long 2013-12-14 17:06:33 -05:00
parent 35acab9d30
commit 7b890e9d89
3 changed files with 26 additions and 11 deletions

View file

@ -52,12 +52,13 @@ public class MakeTiles
for (int i = 0; i < NTILES; i++) {
int tileNumber = SKIP_TILES + i;
String rawSpec = recipe.getProperty(Integer.toString(tileNumber));
String tileName = Integer.toString(tileNumber);
String rawSpec = recipe.getProperty(tileName);
if (rawSpec == null) {
continue;
}
TileSpec tileSpec = TileSpec.parse(tileNumber, rawSpec, recipe);
TileSpec tileSpec = TileSpec.parse(tileNumber, tileName, rawSpec, recipe);
FrameSpec ref = parseFrameSpec(tileSpec);
if (ref == null) {
// tile is defined, but it has no images

View file

@ -13,6 +13,7 @@ import java.util.*;
public class TileSpec
{
int tileNumber;
String name;
TileSpec animNext;
TileSpec onPower;
TileSpec onShutdown;
@ -29,16 +30,17 @@ public class TileSpec
Map<String,String> attributes;
List<String> images;
protected TileSpec(int tileNumber)
protected TileSpec(int tileNumber, String tileName)
{
this.tileNumber = tileNumber;
this.name = tileName;
this.attributes = new HashMap<String,String>();
this.images = new ArrayList<String>();
}
public static TileSpec parse(int tileNumber, String inStr, Properties tilesRc)
public static TileSpec parse(int tileNumber, String tileName, String inStr, Properties tilesRc)
{
TileSpec ts = new TileSpec(tileNumber);
TileSpec ts = new TileSpec(tileNumber, tileName);
ts.load(inStr, tilesRc);
return ts;
}
@ -290,7 +292,12 @@ public class TileSpec
public String toString()
{
return "{tile#"+tileNumber+"}";
return "{tile:"+name+"}";
}
boolean isNumberedTile()
{
return name.matches("^\\d+$");
}
void resolveReferences(Map<String,TileSpec> tileMap)

View file

@ -43,18 +43,20 @@ public class Tiles
)
);
for (int i = 0; ; i++) {
String tileName = Integer.toString(i);
String [] tileNames = TileSpec.generateTileNames(tilesRc);
tiles = new TileSpec[tileNames.length];
for (int i = 0; i < tileNames.length; i++) {
String tileName = tileNames[i];
String rawSpec = tilesRc.getProperty(tileName);
if (rawSpec == null) {
break;
}
TileSpec ts = TileSpec.parse(i, rawSpec, tilesRc);
TileSpec ts = TileSpec.parse(i, tileName, rawSpec, tilesRc);
tilesByName.put(tileName, ts);
tilesList.add(ts);
tiles[i] = ts;
}
tiles = tilesList.toArray(new TileSpec[0]);
for (int i = 0; i < tiles.length; i++) {
tiles[i].resolveReferences(tilesByName);
@ -79,6 +81,11 @@ public class Tiles
}
}
public static TileSpec load(String tileName)
{
return tilesByName.get(tileName);
}
/**
* Access a tile specification by index number.
*