diff --git a/src/micropolisj/build_tool/MakeTiles.java b/src/micropolisj/build_tool/MakeTiles.java index 170f514..2ee1a29 100644 --- a/src/micropolisj/build_tool/MakeTiles.java +++ b/src/micropolisj/build_tool/MakeTiles.java @@ -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 diff --git a/src/micropolisj/engine/TileSpec.java b/src/micropolisj/engine/TileSpec.java index 265dfb7..aa30c95 100644 --- a/src/micropolisj/engine/TileSpec.java +++ b/src/micropolisj/engine/TileSpec.java @@ -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 attributes; List images; - protected TileSpec(int tileNumber) + protected TileSpec(int tileNumber, String tileName) { this.tileNumber = tileNumber; + this.name = tileName; this.attributes = new HashMap(); this.images = new ArrayList(); } - 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 tileMap) diff --git a/src/micropolisj/engine/Tiles.java b/src/micropolisj/engine/Tiles.java index f8d6f24..36cc806 100644 --- a/src/micropolisj/engine/Tiles.java +++ b/src/micropolisj/engine/Tiles.java @@ -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. *