Animation: ability to read animation from an already-open XML file
This commit is contained in:
parent
6d76b43164
commit
3f2b4957a9
1 changed files with 34 additions and 22 deletions
|
@ -18,9 +18,38 @@ public class Animation extends TileImage
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
FileInputStream fis = new FileInputStream(aniFile);
|
FileInputStream fis = new FileInputStream(aniFile);
|
||||||
Animation self = new Animation();
|
|
||||||
self.load(fis, ctx);
|
try {
|
||||||
return self;
|
|
||||||
|
XMLStreamReader in = XMLInputFactory.newInstance().createXMLStreamReader(fis, "UTF-8");
|
||||||
|
in.nextTag();
|
||||||
|
if (!(in.getEventType() == XMLStreamConstants.START_ELEMENT &&
|
||||||
|
in.getLocalName().equals("micropolis-animation"))) {
|
||||||
|
throw new IOException("Unrecognized file format");
|
||||||
|
}
|
||||||
|
|
||||||
|
Animation a = read(in, ctx);
|
||||||
|
|
||||||
|
in.close();
|
||||||
|
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
catch (XMLStreamException e)
|
||||||
|
{
|
||||||
|
throw new IOException(aniFile.toString()+": "+e.getMessage(), e);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
fis.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Animation read(XMLStreamReader in, LoaderContext ctx)
|
||||||
|
throws XMLStreamException, IOException
|
||||||
|
{
|
||||||
|
Animation a = new Animation();
|
||||||
|
a.load(in, ctx);
|
||||||
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addFrame(TileImage img, int duration)
|
public void addFrame(TileImage img, int duration)
|
||||||
|
@ -30,18 +59,9 @@ public class Animation extends TileImage
|
||||||
frames.add(f);
|
frames.add(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void load(InputStream inStream, LoaderContext ctx)
|
void load(XMLStreamReader in, LoaderContext ctx)
|
||||||
throws IOException
|
throws XMLStreamException, IOException
|
||||||
{
|
{
|
||||||
try {
|
|
||||||
|
|
||||||
XMLStreamReader in = XMLInputFactory.newInstance().createXMLStreamReader(inStream, "UTF-8");
|
|
||||||
in.nextTag();
|
|
||||||
if (!(in.getEventType() == XMLStreamConstants.START_ELEMENT &&
|
|
||||||
in.getLocalName().equals("micropolis-animation"))) {
|
|
||||||
throw new IOException("Unrecognized file format");
|
|
||||||
}
|
|
||||||
|
|
||||||
while (in.nextTag() != XMLStreamConstants.END_ELEMENT) {
|
while (in.nextTag() != XMLStreamConstants.END_ELEMENT) {
|
||||||
assert in.isStartElement();
|
assert in.isStartElement();
|
||||||
|
|
||||||
|
@ -59,14 +79,6 @@ public class Animation extends TileImage
|
||||||
skipToEndElement(in);
|
skipToEndElement(in);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
in.close();
|
|
||||||
inStream.close();
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (XMLStreamException e) {
|
|
||||||
throw new IOException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Frame
|
public class Frame
|
||||||
|
|
Reference in a new issue