[tiled] r658 - in trunk: . examples src/tiled/io/xml
svn@biggeruniverse.com
svn at biggeruniverse.com
Mon Jun 5 14:06:21 PDT 2006
Author: bjorn
Date: 2006-06-05 16:06:20 -0500 (Mon, 05 Jun 2006)
New Revision: 658
Modified:
trunk/CHANGES
trunk/examples/tilebmp-test.tmx
trunk/src/tiled/io/xml/XMLMapTransformer.java
trunk/src/tiled/io/xml/XMLMapWriter.java
trunk/src/tiled/io/xml/XMLWriterException.java
Log:
Properties now stored in a "properties" element, loading of maps is backwards compatible.
XMLWriterException changed to a RuntimeException.
Modified: trunk/CHANGES
===================================================================
--- trunk/CHANGES 2006-06-05 20:22:10 UTC (rev 657)
+++ trunk/CHANGES 2006-06-05 21:06:20 UTC (rev 658)
@@ -44,6 +44,7 @@
* Cleaned up TileSet (removed checksumming and rotation/orienation code)
* Removed experimental hexagonal mapview from new map dialog
* Removed option to not automatically create tiles from a tileset image
+* Changed map format to store properties within a single "properties" element
0.5.1 - June 15th, 2005
Modified: trunk/examples/tilebmp-test.tmx
===================================================================
--- trunk/examples/tilebmp-test.tmx 2006-06-05 20:22:10 UTC (rev 657)
+++ trunk/examples/tilebmp-test.tmx 2006-06-05 21:06:20 UTC (rev 658)
@@ -1,14 +1,20 @@
<?xml version="1.0"?>
-<map version="0.99a" orientation="orthogonal" width="64" height="64" tilewidth="24" tileheight="24">
- <property name="test" value="value"/>
+<map version="0.99b" orientation="orthogonal" width="64" height="64" tilewidth="24" tileheight="24">
+ <properties>
+ <property name="test" value="value"/>
+ </properties>
<tileset name="Sewers" firstgid="1" tilewidth="24" tileheight="24">
<image source="sewer_tileset.png" trans="ff00ff"/>
<tile id="0">
- <property name="obstacle" value="1"/>
+ <properties>
+ <property name="obstacle" value="1"/>
+ </properties>
</tile>
</tileset>
<layer name="Layer 0" width="64" height="64">
- <property name="test2" value="value2"/>
+ <properties>
+ <property name="test2" value="value2"/>
+ </properties>
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3POwoCMRiF0cHOJ/jAahpHLNT9788r5IfgCiSc4kBuIJBvnqZp7txiF/s4xNLturv/vBnJt/8Sq7i2/tp1N3r/Ojaxbf21y+j9xzjFufXXLiP3P+PVPLpz7/0H/wQAAAAAAAAAAAAAAAAAgBF9AJgOlPoAQAAA
</data>
Modified: trunk/src/tiled/io/xml/XMLMapTransformer.java
===================================================================
--- trunk/src/tiled/io/xml/XMLMapTransformer.java 2006-06-05 20:22:10 UTC (rev 657)
+++ trunk/src/tiled/io/xml/XMLMapTransformer.java 2006-06-05 21:06:20 UTC (rev 658)
@@ -148,10 +148,10 @@
return child;
}
}
-
+
return null;
}
-
+
private Object unmarshalClass(Class reflector, Node node)
throws InstantiationException, IllegalAccessException,
InvocationTargetException {
@@ -335,7 +335,7 @@
boolean hasTilesetImage = false;
NodeList children = t.getChildNodes();
-
+
//if we have a tileset image, load it (tileset can have only one image element)
Node child = findChild(t, "image");
if(child != null) {
@@ -344,7 +344,7 @@
String transStr = getAttributeValue(child, "trans");
hasTilesetImage = true;
-
+
if (imgSource != null && id == null) {
// Not a shared image, but an entire set in one image
// file
@@ -391,7 +391,7 @@
Integer.parseInt(getAttributeValue(child, "id")));
}
}
-
+
//spin through and find tile elements
for (int i = 0; i < children.getLength(); i++) {
Node c = children.item(i);
@@ -422,18 +422,31 @@
return obj;
}
- Properties objProps = obj.getProperties();
- NodeList children = t.getChildNodes();
+ readProperties(t.getChildNodes(), obj.getProperties());
+ return obj;
+ }
+ /**
+ * Reads properties from amongst the given children. When a "properties"
+ * element is encountered, it recursively calls itself with the children
+ * of this node. This function ensures backward compatibility with tmx
+ * version 0.99a.
+ *
+ * @param children the children amongst which to find properties
+ * @param props the properties object to set the properties of
+ */
+ private static void readProperties(NodeList children, Properties props) {
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if ("property".equalsIgnoreCase(child.getNodeName())) {
- objProps.setProperty(
+ props.setProperty(
getAttributeValue(child, "name"),
getAttributeValue(child, "value"));
}
+ else if ("properties".equals(child.getNodeName())) {
+ readProperties(child.getChildNodes(), props);
+ }
}
- return obj;
}
private Tile unmarshalTile(TileSet set, Node t, String baseDir)
@@ -458,14 +471,14 @@
tile = (Tile)unmarshalClass(Tile.class, t);
}
} catch (Exception e) {
- logger.error("failed creating tile: "+e.getLocalizedMessage());
+ logger.error("failed creating tile: "+e.getLocalizedMessage());
//e.printStackTrace();
return tile;
}
tile.setTileSet(set);
- Properties tileProps = tile.getProperties();
+ readProperties(children, tile.getProperties());
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
@@ -476,10 +489,6 @@
id = set.addImage(img);
}
tile.setImage(id);
- } else if ("property".equalsIgnoreCase(child.getNodeName())) {
- tileProps.setProperty(
- getAttributeValue(child, "name"),
- getAttributeValue(child, "value"));
} else if ("animation".equalsIgnoreCase(child.getNodeName())) {
// TODO: fill this in once XMLMapWriter is complete
}
@@ -532,7 +541,7 @@
ml.setOpacity(Float.parseFloat(opacity));
}
- Properties mlProps = ml.getProperties();
+ readProperties(t.getChildNodes(), ml.getProperties());
for (Node child = t.getFirstChild(); child != null;
child = child.getNextSibling())
@@ -600,9 +609,6 @@
}
}
}
- } else if ("property".equalsIgnoreCase(child.getNodeName())) {
- mlProps.setProperty(getAttributeValue(child, "name"),
- getAttributeValue(child, "value"));
}
}
@@ -661,7 +667,7 @@
setOrientation("orthogonal");
}
- Properties mapProps = map.getProperties();
+ readProperties(mapNode.getChildNodes(), map.getProperties());
// Load the tilesets, properties, layers and objectgroups
for (Node sibs = mapNode.getFirstChild(); sibs != null;
@@ -670,10 +676,6 @@
if ("tileset".equals(sibs.getNodeName())) {
map.addTileset(unmarshalTileset(sibs));
}
- else if ("property".equals(sibs.getNodeName())) {
- mapProps.setProperty(getAttributeValue(sibs, "name"),
- getAttributeValue(sibs, "value"));
- }
else if ("layer".equals(sibs.getNodeName())) {
MapLayer layer = readLayer(sibs);
if (layer != null) {
Modified: trunk/src/tiled/io/xml/XMLMapWriter.java
===================================================================
--- trunk/src/tiled/io/xml/XMLMapWriter.java 2006-06-05 20:22:10 UTC (rev 657)
+++ trunk/src/tiled/io/xml/XMLMapWriter.java 2006-06-05 21:06:20 UTC (rev 658)
@@ -12,9 +12,9 @@
package tiled.io.xml;
+import java.awt.Color;
import java.awt.Image;
import java.awt.Rectangle;
-import java.awt.Color;
import java.io.*;
import java.util.Enumeration;
import java.util.Iterator;
@@ -24,9 +24,12 @@
import java.util.zip.GZIPOutputStream;
import tiled.core.*;
-import tiled.io.*;
+import tiled.io.ImageHelper;
+import tiled.io.MapWriter;
+import tiled.io.PluginLogger;
import tiled.mapeditor.selection.SelectionLayer;
-import tiled.util.*;
+import tiled.util.Base64;
+import tiled.util.TiledConfiguration;
/**
* @version $Id$
@@ -102,60 +105,60 @@
}
private static void writeMap(Map map, XMLWriter w, String wp) throws IOException {
- try {
- w.startElement("map");
+ w.startElement("map");
- w.writeAttribute("version", "0.99a");
+ w.writeAttribute("version", "0.99b");
- switch (map.getOrientation()) {
- case Map.MDO_ORTHO:
- w.writeAttribute("orientation", "orthogonal"); break;
- case Map.MDO_ISO:
- w.writeAttribute("orientation", "isometric"); break;
- case Map.MDO_OBLIQUE:
- w.writeAttribute("orientation", "oblique"); break;
- case Map.MDO_HEX:
- w.writeAttribute("orientation", "hexagonal"); break;
- case Map.MDO_SHIFTED:
- w.writeAttribute("orientation", "shifted"); break;
- }
+ switch (map.getOrientation()) {
+ case Map.MDO_ORTHO:
+ w.writeAttribute("orientation", "orthogonal"); break;
+ case Map.MDO_ISO:
+ w.writeAttribute("orientation", "isometric"); break;
+ case Map.MDO_OBLIQUE:
+ w.writeAttribute("orientation", "oblique"); break;
+ case Map.MDO_HEX:
+ w.writeAttribute("orientation", "hexagonal"); break;
+ case Map.MDO_SHIFTED:
+ w.writeAttribute("orientation", "shifted"); break;
+ }
- w.writeAttribute("width", map.getWidth());
- w.writeAttribute("height", map.getHeight());
- w.writeAttribute("tilewidth", map.getTileWidth());
- w.writeAttribute("tileheight", map.getTileHeight());
+ w.writeAttribute("width", map.getWidth());
+ w.writeAttribute("height", map.getHeight());
+ w.writeAttribute("tilewidth", map.getTileWidth());
+ w.writeAttribute("tileheight", map.getTileHeight());
- writeProperties(map.getProperties(), w);
+ writeProperties(map.getProperties(), w);
- int firstgid = 1;
- Iterator itr = map.getTilesets().iterator();
- while (itr.hasNext()) {
- TileSet tileset = (TileSet)itr.next();
- tileset.setFirstGid(firstgid);
- writeTilesetReference(tileset, w, wp);
- firstgid += tileset.getMaxTileId() + 1;
- }
+ int firstgid = 1;
+ Iterator itr = map.getTilesets().iterator();
+ while (itr.hasNext()) {
+ TileSet tileset = (TileSet)itr.next();
+ tileset.setFirstGid(firstgid);
+ writeTilesetReference(tileset, w, wp);
+ firstgid += tileset.getMaxTileId() + 1;
+ }
- Iterator ml = map.getLayers();
- while (ml.hasNext()) {
- MapLayer layer = (MapLayer)ml.next();
- writeMapLayer(layer, w);
- }
-
- w.endElement();
- } catch (XMLWriterException e) {
- e.printStackTrace();
+ Iterator ml = map.getLayers();
+ while (ml.hasNext()) {
+ MapLayer layer = (MapLayer)ml.next();
+ writeMapLayer(layer, w);
}
+
+ w.endElement();
}
private static void writeProperties(Properties props, XMLWriter w) throws
- IOException, XMLWriterException
+ IOException
{
- for (Enumeration keys = props.keys(); keys.hasMoreElements();) {
- String key = (String)keys.nextElement();
- w.startElement("property");
- w.writeAttribute("name", key);
- w.writeAttribute("value", props.getProperty(key));
+ if (!props.isEmpty()) {
+ w.startElement("properties");
+ for (Enumeration keys = props.keys(); keys.hasMoreElements();) {
+ String key = (String)keys.nextElement();
+ w.startElement("property");
+ w.writeAttribute("name", key);
+ w.writeAttribute("value", props.getProperty(key));
+ w.endElement();
+ }
w.endElement();
}
}
@@ -168,156 +171,148 @@
private static void writeTilesetReference(TileSet set, XMLWriter w, String wp)
throws IOException {
- try {
- String source = set.getSource();
+ String source = set.getSource();
- if (source == null) {
- writeTileset(set, w, wp);
- } else {
- w.startElement("tileset");
- try {
- w.writeAttribute("firstgid", set.getFirstGid());
- w.writeAttribute("source", source.substring(
- source.lastIndexOf(File.separatorChar) + 1));
- if (set.getBaseDir() != null) {
- w.writeAttribute("basedir", set.getBaseDir());
- }
- } finally {
- w.endElement();
+ if (source == null) {
+ writeTileset(set, w, wp);
+ } else {
+ w.startElement("tileset");
+ try {
+ w.writeAttribute("firstgid", set.getFirstGid());
+ w.writeAttribute("source", source.substring(
+ source.lastIndexOf(File.separatorChar) + 1));
+ if (set.getBaseDir() != null) {
+ w.writeAttribute("basedir", set.getBaseDir());
}
+ } finally {
+ w.endElement();
}
- } catch (XMLWriterException e) {
- e.printStackTrace();
}
}
private static void writeTileset(TileSet set, XMLWriter w, String wp)
throws IOException {
- try {
- String tilebmpFile = set.getTilebmpFile();
- String name = set.getName();
+ String tilebmpFile = set.getTilebmpFile();
+ String name = set.getName();
- w.startElement("tileset");
+ w.startElement("tileset");
- if (name != null) {
- w.writeAttribute("name", name);
- }
+ if (name != null) {
+ w.writeAttribute("name", name);
+ }
- w.writeAttribute("firstgid", set.getFirstGid());
+ w.writeAttribute("firstgid", set.getFirstGid());
- if (tilebmpFile != null) {
- w.writeAttribute("tilewidth", set.getTileWidth());
- w.writeAttribute("tileheight", set.getTileHeight());
+ if (tilebmpFile != null) {
+ w.writeAttribute("tilewidth", set.getTileWidth());
+ w.writeAttribute("tileheight", set.getTileHeight());
- int tileSpacing = set.getTileSpacing();
- if (tileSpacing != 0) {
- w.writeAttribute("spacing", tileSpacing);
- }
+ int tileSpacing = set.getTileSpacing();
+ if (tileSpacing != 0) {
+ w.writeAttribute("spacing", tileSpacing);
}
+ }
- if (set.getBaseDir() != null) {
- w.writeAttribute("basedir", set.getBaseDir());
- }
+ if (set.getBaseDir() != null) {
+ w.writeAttribute("basedir", set.getBaseDir());
+ }
- if (tilebmpFile != null) {
- w.startElement("image");
- w.writeAttribute("source", getRelativePath(wp, tilebmpFile));
+ if (tilebmpFile != null) {
+ w.startElement("image");
+ w.writeAttribute("source", getRelativePath(wp, tilebmpFile));
- Color trans = set.getTransparentColor();
- if (trans != null) {
- w.writeAttribute("trans", Integer.toHexString(
- trans.getRGB()).substring(2));
- }
- w.endElement();
+ Color trans = set.getTransparentColor();
+ if (trans != null) {
+ w.writeAttribute("trans", Integer.toHexString(
+ trans.getRGB()).substring(2));
+ }
+ w.endElement();
- // Write tile properties when necessary.
- Iterator tileIterator = set.iterator();
+ // Write tile properties when necessary.
+ Iterator tileIterator = set.iterator();
- while (tileIterator.hasNext()) {
- Tile tile = (Tile) tileIterator.next();
- // todo: move the null check back into the iterator?
- if (tile != null && !tile.getProperties().isEmpty()) {
- w.startElement("tile");
- w.writeAttribute("id", tile.getId());
- writeProperties(tile.getProperties(), w);
- w.endElement();
- }
+ while (tileIterator.hasNext()) {
+ Tile tile = (Tile) tileIterator.next();
+ // todo: move the null check back into the iterator?
+ if (tile != null && !tile.getProperties().isEmpty()) {
+ w.startElement("tile");
+ w.writeAttribute("id", tile.getId());
+ writeProperties(tile.getProperties(), w);
+ w.endElement();
}
- } else {
- // Embedded tileset
- Preferences prefs = TiledConfiguration.node("saving");
+ }
+ } else {
+ // Embedded tileset
+ Preferences prefs = TiledConfiguration.node("saving");
- boolean embedImages = prefs.getBoolean("embedImages", true);
- boolean tileSetImages = prefs.getBoolean("tileSetImages", false);
+ boolean embedImages = prefs.getBoolean("embedImages", true);
+ boolean tileSetImages = prefs.getBoolean("tileSetImages", false);
- if (tileSetImages) {
- Enumeration ids = set.getImageIds();
- while (ids.hasMoreElements()) {
- String id = (String)ids.nextElement();
- w.startElement("image");
- w.writeAttribute("format", "png");
- w.writeAttribute("id", id);
- w.startElement("data");
- w.writeAttribute("encoding", "base64");
- w.writeCDATA(new String(Base64.encode(
- ImageHelper.imageToPNG(
- set.getImageById(Integer.parseInt(id))))));
- w.endElement();
- w.endElement();
- }
- } else if (!embedImages) {
- String imgSource =
- prefs.get("tileImagePrefix", "tile") + "set.png";
-
+ if (tileSetImages) {
+ Enumeration ids = set.getImageIds();
+ while (ids.hasMoreElements()) {
+ String id = (String)ids.nextElement();
w.startElement("image");
- w.writeAttribute("source", imgSource);
-
- String tilesetFilename = wp.substring(0,
- wp.lastIndexOf(File.separatorChar) + 1) + imgSource;
- FileOutputStream fw = new FileOutputStream(new File(
- tilesetFilename));
- //byte[] data = ImageHelper.imageToPNG(setImage);
- //fw.write(data, 0, data.length);
+ w.writeAttribute("format", "png");
+ w.writeAttribute("id", id);
+ w.startElement("data");
+ w.writeAttribute("encoding", "base64");
+ w.writeCDATA(new String(Base64.encode(
+ ImageHelper.imageToPNG(
+ set.getImageById(Integer.parseInt(id))))));
w.endElement();
-
- fw.close();
+ w.endElement();
}
+ } else if (!embedImages) {
+ String imgSource =
+ prefs.get("tileImagePrefix", "tile") + "set.png";
- // Check to see if there is a need to write tile elements
- Iterator tileIterator = set.iterator();
- boolean needWrite = !set.isOneForOne();
+ w.startElement("image");
+ w.writeAttribute("source", imgSource);
- if (embedImages) {
- needWrite = true;
- } else {
- while (tileIterator.hasNext()) {
- Tile tile = (Tile)tileIterator.next();
- if (!tile.getProperties().isEmpty()) {
- needWrite = true;
- break;
- // As long as one has properties, they all
- // need to be written.
- // TODO: This shouldn't be necessary
- }
+ String tilesetFilename = wp.substring(0,
+ wp.lastIndexOf(File.separatorChar) + 1) + imgSource;
+ FileOutputStream fw = new FileOutputStream(new File(
+ tilesetFilename));
+ //byte[] data = ImageHelper.imageToPNG(setImage);
+ //fw.write(data, 0, data.length);
+ w.endElement();
+
+ fw.close();
+ }
+
+ // Check to see if there is a need to write tile elements
+ Iterator tileIterator = set.iterator();
+ boolean needWrite = !set.isOneForOne();
+
+ if (embedImages) {
+ needWrite = true;
+ } else {
+ while (tileIterator.hasNext()) {
+ Tile tile = (Tile)tileIterator.next();
+ if (!tile.getProperties().isEmpty()) {
+ needWrite = true;
+ break;
+ // As long as one has properties, they all
+ // need to be written.
+ // TODO: This shouldn't be necessary
}
}
+ }
- if (needWrite) {
- tileIterator = set.iterator();
- while (tileIterator.hasNext()) {
- Tile tile = (Tile)tileIterator.next();
- // todo: move this check back into the iterator?
- if (tile != null) {
- writeTile(tile, w);
- }
+ if (needWrite) {
+ tileIterator = set.iterator();
+ while (tileIterator.hasNext()) {
+ Tile tile = (Tile)tileIterator.next();
+ // todo: move this check back into the iterator?
+ if (tile != null) {
+ writeTile(tile, w);
}
}
}
- w.endElement();
- } catch (XMLWriterException e) {
- e.printStackTrace();
}
+ w.endElement();
}
private static void writeObjectGroup(ObjectGroup o, XMLWriter w)
@@ -335,206 +330,190 @@
* gids to be written to the layer data.
*/
private static void writeMapLayer(MapLayer l, XMLWriter w) throws IOException {
- try {
- Preferences prefs = TiledConfiguration.node("saving");
- boolean encodeLayerData =
- prefs.getBoolean("encodeLayerData", true);
- boolean compressLayerData =
- prefs.getBoolean("layerCompression", true) &&
- encodeLayerData;
+ Preferences prefs = TiledConfiguration.node("saving");
+ boolean encodeLayerData =
+ prefs.getBoolean("encodeLayerData", true);
+ boolean compressLayerData =
+ prefs.getBoolean("layerCompression", true) &&
+ encodeLayerData;
- Rectangle bounds = l.getBounds();
+ Rectangle bounds = l.getBounds();
- if (l.getClass() == SelectionLayer.class) {
- w.startElement("selection");
- } else if(l instanceof ObjectGroup){
- w.startElement("objectgroup");
- } else {
- w.startElement("layer");
- }
+ if (l.getClass() == SelectionLayer.class) {
+ w.startElement("selection");
+ } else if(l instanceof ObjectGroup){
+ w.startElement("objectgroup");
+ } else {
+ w.startElement("layer");
+ }
- w.writeAttribute("name", l.getName());
- w.writeAttribute("width", bounds.width);
- w.writeAttribute("height", bounds.height);
- if (bounds.x != 0) {
- w.writeAttribute("xoffset", bounds.x);
- }
- if (bounds.y != 0) {
- w.writeAttribute("yoffset", bounds.y);
- }
+ w.writeAttribute("name", l.getName());
+ w.writeAttribute("width", bounds.width);
+ w.writeAttribute("height", bounds.height);
+ if (bounds.x != 0) {
+ w.writeAttribute("xoffset", bounds.x);
+ }
+ if (bounds.y != 0) {
+ w.writeAttribute("yoffset", bounds.y);
+ }
- if (!l.isVisible()) {
- w.writeAttribute("visible", "0");
- }
- if (l.getOpacity() < 1.0f) {
- w.writeAttribute("opacity", l.getOpacity());
- }
+ if (!l.isVisible()) {
+ w.writeAttribute("visible", "0");
+ }
+ if (l.getOpacity() < 1.0f) {
+ w.writeAttribute("opacity", l.getOpacity());
+ }
- writeProperties(l.getProperties(), w);
+ writeProperties(l.getProperties(), w);
- if (l instanceof ObjectGroup){
- writeObjectGroup((ObjectGroup)l, w);
- } else {
- w.startElement("data");
- if (encodeLayerData) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- OutputStream out;
+ if (l instanceof ObjectGroup){
+ writeObjectGroup((ObjectGroup)l, w);
+ } else {
+ w.startElement("data");
+ if (encodeLayerData) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ OutputStream out;
- w.writeAttribute("encoding", "base64");
+ w.writeAttribute("encoding", "base64");
- if (compressLayerData) {
- w.writeAttribute("compression", "gzip");
- out = new GZIPOutputStream(baos);
- } else {
- out = baos;
- }
+ if (compressLayerData) {
+ w.writeAttribute("compression", "gzip");
+ out = new GZIPOutputStream(baos);
+ } else {
+ out = baos;
+ }
- for (int y = 0; y < l.getHeight(); y++) {
- for (int x = 0; x < l.getWidth(); x++) {
- Tile tile = ((TileLayer)l).getTileAt(x, y);
- int gid = 0;
+ for (int y = 0; y < l.getHeight(); y++) {
+ for (int x = 0; x < l.getWidth(); x++) {
+ Tile tile = ((TileLayer)l).getTileAt(x, y);
+ int gid = 0;
- if (tile != null) {
- gid = tile.getGid();
- }
-
- out.write(gid & LAST_BYTE);
- out.write(gid >> 8 & LAST_BYTE);
- out.write(gid >> 16 & LAST_BYTE);
- out.write(gid >> 24 & LAST_BYTE);
+ if (tile != null) {
+ gid = tile.getGid();
}
- }
- if (compressLayerData) {
- ((GZIPOutputStream)out).finish();
+ out.write(gid & LAST_BYTE);
+ out.write(gid >> 8 & LAST_BYTE);
+ out.write(gid >> 16 & LAST_BYTE);
+ out.write(gid >> 24 & LAST_BYTE);
}
+ }
- w.writeCDATA(new String(Base64.encode(baos.toByteArray())));
- } else {
- for (int y = 0; y < l.getHeight(); y++) {
- for (int x = 0; x < l.getWidth(); x++) {
- Tile tile = ((TileLayer)l).getTileAt(x, y);
- int gid = 0;
+ if (compressLayerData) {
+ ((GZIPOutputStream)out).finish();
+ }
- if (tile != null) {
- gid = tile.getGid();
- }
+ w.writeCDATA(new String(Base64.encode(baos.toByteArray())));
+ } else {
+ for (int y = 0; y < l.getHeight(); y++) {
+ for (int x = 0; x < l.getWidth(); x++) {
+ Tile tile = ((TileLayer)l).getTileAt(x, y);
+ int gid = 0;
- w.startElement("tile");
- w.writeAttribute("gid", gid);
- w.endElement();
+ if (tile != null) {
+ gid = tile.getGid();
}
+
+ w.startElement("tile");
+ w.writeAttribute("gid", gid);
+ w.endElement();
}
}
- w.endElement();
}
w.endElement();
- } catch (XMLWriterException e) {
- e.printStackTrace();
}
+ w.endElement();
}
private static void writeTile(Tile tile, XMLWriter w) throws IOException {
- try {
- w.startElement("tile");
+ w.startElement("tile");
- int tileId = tile.getId();
+ int tileId = tile.getId();
- w.writeAttribute("id", tileId);
+ w.writeAttribute("id", tileId);
- //if (groundHeight != getHeight()) {
- // w.writeAttribute("groundheight", "" + groundHeight);
- //}
+ //if (groundHeight != getHeight()) {
+ // w.writeAttribute("groundheight", "" + groundHeight);
+ //}
- writeProperties(tile.getProperties(), w);
+ writeProperties(tile.getProperties(), w);
- Image tileImage = tile.getImage();
+ Image tileImage = tile.getImage();
- Preferences prefs = TiledConfiguration.node("saving");
+ Preferences prefs = TiledConfiguration.node("saving");
- boolean embedImages = prefs.getBoolean("embedImages", true);
- boolean tileSetImages = prefs.getBoolean("tileSetImages", false);
+ boolean embedImages = prefs.getBoolean("embedImages", true);
+ boolean tileSetImages = prefs.getBoolean("tileSetImages", false);
- // Write encoded data
- if (tileImage != null && !tileSetImages) {
- if (embedImages && !tileSetImages) {
- w.startElement("image");
- w.writeAttribute("format", "png");
- w.startElement("data");
- w.writeAttribute("encoding", "base64");
- w.writeCDATA(new String(Base64.encode(
- ImageHelper.imageToPNG(tileImage))));
- w.endElement();
- w.endElement();
- } else if (tileSetImages) {
- w.startElement("image");
- w.writeAttribute("id", tile.getImageId());
- w.endElement();
- } else {
- String prefix = prefs.get("tileImagePrefix", "tile");
- String filename = prefs.get("maplocation", "") +
- prefix + tileId + ".png";
- w.startElement("image");
- w.writeAttribute("source", prefix + tileId + ".png");
- FileOutputStream fw = new FileOutputStream(
- new File(filename));
- byte[] data = ImageHelper.imageToPNG(tileImage);
- fw.write(data, 0, data.length);
- fw.close();
- w.endElement();
- }
+ // Write encoded data
+ if (tileImage != null && !tileSetImages) {
+ if (embedImages && !tileSetImages) {
+ w.startElement("image");
+ w.writeAttribute("format", "png");
+ w.startElement("data");
+ w.writeAttribute("encoding", "base64");
+ w.writeCDATA(new String(Base64.encode(
+ ImageHelper.imageToPNG(tileImage))));
+ w.endElement();
+ w.endElement();
+ } else if (tileSetImages) {
+ w.startElement("image");
+ w.writeAttribute("id", tile.getImageId());
+ w.endElement();
+ } else {
+ String prefix = prefs.get("tileImagePrefix", "tile");
+ String filename = prefs.get("maplocation", "") +
+ prefix + tileId + ".png";
+ w.startElement("image");
+ w.writeAttribute("source", prefix + tileId + ".png");
+ FileOutputStream fw = new FileOutputStream(
+ new File(filename));
+ byte[] data = ImageHelper.imageToPNG(tileImage);
+ fw.write(data, 0, data.length);
+ fw.close();
+ w.endElement();
}
+ }
- if (tile instanceof AnimatedTile) {
- writeAnimation(((AnimatedTile)tile).getSprite(), w);
- }
-
- w.endElement();
- } catch (XMLWriterException e) {
- e.printStackTrace();
+ if (tile instanceof AnimatedTile) {
+ writeAnimation(((AnimatedTile)tile).getSprite(), w);
}
+
+ w.endElement();
}
private static void writeAnimation(Sprite s, XMLWriter w) throws IOException {
- try {
- w.startElement("animation");
- for (int k = 0; k < s.getTotalKeys(); k++) {
- Sprite.KeyFrame key = s.getKey(k);
- w.startElement("keyframe");
- w.writeAttribute("name", key.getName());
- for (int it = 0; it < key.getTotalFrames(); it++) {
- Tile stile = key.getFrame(it);
- w.startElement("tile");
- w.writeAttribute("gid", stile.getGid());
- w.endElement();
- }
+ w.startElement("animation");
+ for (int k = 0; k < s.getTotalKeys(); k++) {
+ Sprite.KeyFrame key = s.getKey(k);
+ w.startElement("keyframe");
+ w.writeAttribute("name", key.getName());
+ for (int it = 0; it < key.getTotalFrames(); it++) {
+ Tile stile = key.getFrame(it);
+ w.startElement("tile");
+ w.writeAttribute("gid", stile.getGid());
w.endElement();
}
w.endElement();
- } catch (XMLWriterException e) {
- e.printStackTrace();
}
+ w.endElement();
}
private static void writeObject(MapObject m, ObjectGroup o, XMLWriter w)
throws IOException
{
- try {
- Rectangle b = o.getBounds();
- w.startElement("object");
- w.writeAttribute("x", m.getX() + b.x);
- w.writeAttribute("y", m.getY() + b.y);
- w.writeAttribute("type", m.getType());
- if (m.getSource() != null) {
- w.writeAttribute("source", m.getSource());
- }
+ Rectangle b = o.getBounds();
+ w.startElement("object");
+ w.writeAttribute("x", m.getX() + b.x);
+ w.writeAttribute("y", m.getY() + b.y);
+ w.writeAttribute("type", m.getType());
+ if (m.getSource() != null) {
+ w.writeAttribute("source", m.getSource());
+ }
- writeProperties(m.getProperties(), w);
+ writeProperties(m.getProperties(), w);
- w.endElement();
- } catch (XMLWriterException e) {
- e.printStackTrace();
- }
+ w.endElement();
}
/**
Modified: trunk/src/tiled/io/xml/XMLWriterException.java
===================================================================
--- trunk/src/tiled/io/xml/XMLWriterException.java 2006-06-05 20:22:10 UTC (rev 657)
+++ trunk/src/tiled/io/xml/XMLWriterException.java 2006-06-05 21:06:20 UTC (rev 658)
@@ -5,15 +5,17 @@
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* Adam Turk <aturk at biggeruniverse.com>
* Bjorn Lindeijer <b.lindeijer at xs4all.nl>
*/
package tiled.io.xml;
-
-public class XMLWriterException extends Exception
+/**
+ * @version $Id$
+ */
+public class XMLWriterException extends RuntimeException
{
public XMLWriterException(String error) {
super(error);
More information about the tiled-commit
mailing list