/* * 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 java.awt.Point; import org.lateralgm.resources.Path; import org.lateralgm.resources.Path.PPath; import org.lateralgm.resources.ResourceReference; import org.lateralgm.resources.Room; import org.lateralgm.resources.sub.PathPoint; 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; public class PathXmlFormat extends XmlFormat<Path> { @Override public void write(Path path, XmlWriter writer) { writer.startElement("path"); { writeIdAttribute(path, writer); writer.startElement("points"); for (PathPoint pp : path.points) { writer.startElement("point"); writer.putAttribute("x", pp.getX()); writer.putAttribute("y", pp.getY()); writer.putAttribute("speed", pp.getSpeed()); writer.endElement(); } writer.endElement(); writeResourceRef(writer, "backgroundRoom", (ResourceReference<?>) path.get(PPath.BACKGROUND_ROOM)); writer.putElement("closed", path.get(PPath.CLOSED)); writer.putElement("precision", path.get(PPath.PRECISION)); writer.putElement("smooth", path.get(PPath.SMOOTH)); int snapX = path.get(PPath.SNAP_X); int snapY = path.get(PPath.SNAP_Y); writePoint(writer, "snap", new Point(snapX, snapY)); } writer.endElement(); } @Override public Path read(XmlReader reader, DeferredReferenceCreatorNotifier notifier) { Path path = new Path(); reader.enterElement("path"); { readIdAttribute(path, reader); reader.enterElement("points"); while (reader.hasNextElement()) { reader.enterElement("point"); PathPoint pp = path.addPoint(); pp.setX(reader.getIntAttribute("x")); pp.setY(reader.getIntAttribute("y")); pp.setSpeed(reader.getIntAttribute("speed")); reader.leaveElement(); } reader.leaveElement(); String backgroundRoomRef = readResourceRef(reader, "backgroundRoom"); DeferredReferenceCreator rc = new DeferredPropertyReferenceCreator<PPath>( path.properties, PPath.BACKGROUND_ROOM, Room.class, backgroundRoomRef); notifier.addDeferredReferenceCreator(rc); path.put(PPath.CLOSED, reader.getBoolElement("closed")); path.put(PPath.PRECISION, reader.getIntElement("precision")); path.put(PPath.SMOOTH, reader.getBoolElement("smooth")); Point snap = readPoint(reader, "snap"); path.put(PPath.SNAP_X, snap.x); path.put(PPath.SNAP_Y, snap.y); } reader.leaveElement(); return path; } }