diff --git a/src/micropolisj/build_tool/MakeTiles.java b/src/micropolisj/build_tool/MakeTiles.java index d94ea94..9fee28f 100644 --- a/src/micropolisj/build_tool/MakeTiles.java +++ b/src/micropolisj/build_tool/MakeTiles.java @@ -47,7 +47,7 @@ public class MakeTiles String rawSpec = recipe.getProperty(Integer.toString(i)); assert rawSpec != null; - TileSpec tileSpec = TileSpec.parse(i, rawSpec); + TileSpec tileSpec = TileSpec.parse(i, rawSpec, recipe); FrameSpec ref = parseFrameSpec(tileSpec); drawTo(ref, gr, 0, TILE_SIZE*i); } diff --git a/src/micropolisj/engine/TileSpec.java b/src/micropolisj/engine/TileSpec.java index df6c1b8..04f071a 100644 --- a/src/micropolisj/engine/TileSpec.java +++ b/src/micropolisj/engine/TileSpec.java @@ -20,10 +20,10 @@ public class TileSpec this.images = new ArrayList(); } - public static TileSpec parse(int tileNumber, String inStr) + public static TileSpec parse(int tileNumber, String inStr, Properties tilesRc) { TileSpec ts = new TileSpec(tileNumber); - ts.load(inStr); + ts.load(inStr, tilesRc); return ts; } @@ -43,7 +43,7 @@ public class TileSpec return images.toArray(new String[0]); } - protected void load(String inStr) + protected void load(String inStr, Properties tilesRc) { Scanner in = new Scanner(inStr); @@ -58,7 +58,17 @@ public class TileSpec v = in.readAttributeValue(); } in.eatChar(')'); - attributes.put(k, v); + + if (!attributes.containsKey(k)) { + attributes.put(k, v); + String sup = tilesRc.getProperty(k); + if (sup != null) { + load(sup, tilesRc); + } + } + else { + attributes.put(k, v); + } } else if (in.peekChar() == '|' || in.peekChar() == ',') { diff --git a/src/micropolisj/engine/Tiles.java b/src/micropolisj/engine/Tiles.java index c7e4aa9..1a69527 100644 --- a/src/micropolisj/engine/Tiles.java +++ b/src/micropolisj/engine/Tiles.java @@ -37,7 +37,7 @@ public class Tiles continue; } - tiles[i] = TileSpec.parse(i, rawSpec); + tiles[i] = TileSpec.parse(i, rawSpec, tilesRc); } for (int i = 0; i < tiles.length; i++) {