TileImageLayer: require both elements to be non-null

simplifies some algorithms
This commit is contained in:
Jason Long 2014-08-18 16:29:22 -07:00
parent 744e74267a
commit a99a6f0f1c
3 changed files with 30 additions and 25 deletions

View file

@ -49,6 +49,7 @@
fork="true" failonerror="true" dir="graphics" inputstring=""> fork="true" failonerror="true" dir="graphics" inputstring="">
<arg file="graphics/tiles.rc" /> <arg file="graphics/tiles.rc" />
<arg file="${builddir}/16x16" /> <arg file="${builddir}/16x16" />
<assertions><enable/></assertions>
</java> </java>
<java classname="micropolisj.build_tool.MakeTiles" classpath="${builddir}" <java classname="micropolisj.build_tool.MakeTiles" classpath="${builddir}"
fork="true" failonerror="true" dir="graphics" inputstring=""> fork="true" failonerror="true" dir="graphics" inputstring="">

View file

@ -308,19 +308,19 @@ public class MakeTiles
static TileImage parseFrameSpec(String [] layerStrings) static TileImage parseFrameSpec(String [] layerStrings)
throws IOException throws IOException
{ {
if (layerStrings.length == 1) { TileImage result = null;
return parseLayerSpec(layerStrings[0]);
}
TileImageLayer result = null;
for (String layerStr : layerStrings) { for (String layerStr : layerStrings) {
TileImageLayer rv = new TileImageLayer( TileImage newLayer = parseLayerSpec(layerStr);
result, if (result == null) {
parseLayerSpec(layerStr) result = newLayer;
); }
result = rv; else {
result = new TileImageLayer(
result,
newLayer);
}
} }
return result; return result;

View file

@ -24,11 +24,14 @@ public abstract class TileImage
public static class TileImageLayer extends TileImage public static class TileImageLayer extends TileImage
{ {
public final TileImageLayer below; public final TileImage below;
public final TileImage above; public final TileImage above;
public TileImageLayer(TileImageLayer below, TileImage above) public TileImageLayer(TileImage below, TileImage above)
{ {
assert below != null;
assert above != null;
this.below = below; this.below = below;
this.above = above; this.above = above;
} }
@ -36,9 +39,7 @@ public abstract class TileImage
@Override @Override
public void drawFragment(Graphics2D gr, int destX, int destY, int srcX, int srcY) public void drawFragment(Graphics2D gr, int destX, int destY, int srcX, int srcY)
{ {
if (below != null) { below.drawFragment(gr, destX, destY, srcX, srcY);
below.drawFragment(gr, destX, destY, srcX, srcY);
}
above.drawFragment(gr, destX, destY, srcX, srcY); above.drawFragment(gr, destX, destY, srcX, srcY);
} }
} }
@ -204,25 +205,28 @@ public abstract class TileImage
static TileImage readLayeredImage(XMLStreamReader in, LoaderContext ctx) static TileImage readLayeredImage(XMLStreamReader in, LoaderContext ctx)
throws XMLStreamException throws XMLStreamException
{ {
TileImageLayer result = null; TileImage result = null;
while (in.nextTag() != XMLStreamConstants.END_ELEMENT) { while (in.nextTag() != XMLStreamConstants.END_ELEMENT) {
assert in.isStartElement(); assert in.isStartElement();
TileImage newImg = readTileImage(in, ctx); TileImage newImg = readTileImage(in, ctx);
TileImageLayer rv = new TileImageLayer( if (result == null) {
result, //below result = newImg;
newImg //above }
else {
result = new TileImageLayer(
result, //below
newImg //above
); );
result = rv; }
} }
if (result != null && result.below == null) { if (result == null) {
return result.above; throw new XMLStreamException("layer must have at least one image");
}
else {
return result;
} }
return result;
} }
public static TileImage readTileImage(XMLStreamReader in, LoaderContext ctx) public static TileImage readTileImage(XMLStreamReader in, LoaderContext ctx)