TileImageLayer: require both elements to be non-null
simplifies some algorithms
This commit is contained in:
parent
744e74267a
commit
a99a6f0f1c
3 changed files with 30 additions and 25 deletions
|
@ -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="">
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Reference in a new issue