/* * Copyright (C) 2010 Medo <smaxein@googlemail.com> * Copyright (C) 2008, 2009 IsmAvatar <IsmAvatar@gmail.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.GmObject; import org.lateralgm.resources.GmObject.PGmObject; import org.lateralgm.resources.ResourceReference; import org.lateralgm.resources.Sprite; 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 GmObjectXmlFormat extends XmlFormat<GmObject> { @Override public void write(GmObject gmObject, XmlWriter out) { out.startElement("object"); { writeIdAttribute(gmObject, out); writeResourceRef(out, "sprite", (ResourceReference<?>) gmObject.get(PGmObject.SPRITE)); out.putElement("solid", gmObject.get(PGmObject.SOLID)); out.putElement("visible", gmObject.get(PGmObject.VISIBLE)); out.putElement("depth", gmObject.get(PGmObject.DEPTH)); out.putElement("persistent", gmObject.get(PGmObject.PERSISTENT)); writeResourceRef(out, "parent", (ResourceReference<?>) gmObject.get(PGmObject.PARENT)); writeResourceRef(out, "mask", (ResourceReference<?>) gmObject.get(PGmObject.MASK)); } out.endElement(); } @Override public GmObject read(XmlReader reader, DeferredReferenceCreatorNotifier notifier) { GmObject gmObject = new GmObject(); reader.enterElement("object"); { readIdAttribute(gmObject, reader); String spriteRef = readResourceRef(reader, "sprite"); DeferredReferenceCreator rc = new DeferredPropertyReferenceCreator<PGmObject>( gmObject.properties, PGmObject.SPRITE, Sprite.class, spriteRef); notifier.addDeferredReferenceCreator(rc); gmObject.put(PGmObject.SOLID, reader.getBoolElement("solid")); gmObject.put(PGmObject.VISIBLE, reader.getBoolElement("visible")); gmObject.put(PGmObject.DEPTH, reader.getIntElement("depth")); gmObject.put(PGmObject.PERSISTENT, reader.getBoolElement("persistent")); String parentRef = readResourceRef(reader, "parent"); rc = new DeferredPropertyReferenceCreator<PGmObject>( gmObject.properties, PGmObject.PARENT, GmObject.class, parentRef); notifier.addDeferredReferenceCreator(rc); String maskRef = readResourceRef(reader, "mask"); rc = new DeferredPropertyReferenceCreator<PGmObject>( gmObject.properties, PGmObject.MASK, Sprite.class, maskRef); notifier.addDeferredReferenceCreator(rc); } reader.leaveElement(); return gmObject; } }