/*
* Copyright (C) 2010 Medo <smaxein@googlemail.com>
*
* This file is part of GmkSplitter.
* GmkSplitter is free software and comes with ABSOLUTELY NO WARRANTY.
* See LICENSE for details.
*/
package com.ganggarrison.gmdec.xml;
import org.lateralgm.resources.Background;
import org.lateralgm.resources.ResourceReference;
import org.lateralgm.resources.Room;
import org.lateralgm.resources.sub.Tile;
import org.lateralgm.resources.sub.Tile.PTile;
import com.ganggarrison.easyxml.XmlReader;
import com.ganggarrison.easyxml.XmlWriter;
import com.ganggarrison.gmdec.DeferredPropertyReferenceCreator;
import com.ganggarrison.gmdec.DeferredReferenceCreator;
import com.ganggarrison.gmdec.DeferredReferenceCreatorNotifier;
import com.ganggarrison.gmdec.GmkSplitter;
import com.ganggarrison.gmdec.GmkSplitter.IdPreservation;
public class TileXmlFormat extends XmlFormat<Tile> {
private Room room;
public TileXmlFormat(Room room) {
this.room = room;
}
@Override
public void write(Tile tile, XmlWriter writer) {
writer.startElement("tile");
{
if (GmkSplitter.preserveIds == IdPreservation.ALL) {
writer.putAttribute("id", tile.properties.get(PTile.ID));
}
ResourceReference<Background> bgRef = tile.properties.get(PTile.BACKGROUND);
writeResourceRef(writer, "background", bgRef);
writePoint(writer, "backgroundPosition", tile.getBackgroundPosition());
writePoint(writer, "roomPosition", tile.getRoomPosition());
writeDimension(writer, "size", tile.getSize());
writer.putElement("depth", tile.getDepth());
writer.putElement("locked", tile.isLocked());
}
writer.endElement();
}
@Override
public Tile read(XmlReader reader, DeferredReferenceCreatorNotifier notifier) {
Tile tile;
reader.enterElement("tile");
{
tile = new Tile(room);
if (GmkSplitter.preserveIds == IdPreservation.ALL && reader.hasAttribute("id")) {
tile.properties.put(PTile.ID, reader.getIntAttribute("id"));
}
String objRef = readResourceRef(reader, "background");
DeferredReferenceCreator rc = new DeferredPropertyReferenceCreator<PTile>(
tile.properties, PTile.BACKGROUND, Background.class, objRef);
notifier.addDeferredReferenceCreator(rc);
tile.setBackgroundPosition(readPoint(reader, "backgroundPosition"));
tile.setRoomPosition(readPoint(reader, "roomPosition"));
tile.setSize(readDimension(reader, "size"));
tile.setDepth(reader.getIntElement("depth"));
tile.setLocked(reader.getBoolElement("locked"));
}
reader.leaveElement();
return tile;
}
}