/* * 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.Sprite; import org.lateralgm.resources.Sprite.PSprite; import com.ganggarrison.easyxml.XmlReader; import com.ganggarrison.easyxml.XmlWriter; import com.ganggarrison.gmdec.DeferredReferenceCreatorNotifier; import com.ganggarrison.gmdec.GmkSplitter; public class SpriteXmlFormat extends XmlFormat<Sprite> { @Override public void write(Sprite sprite, XmlWriter writer) { writer.startElement("sprite"); { writeIdAttribute(sprite, writer); int originX = sprite.get(PSprite.ORIGIN_X); int originY = sprite.get(PSprite.ORIGIN_Y); writePoint(writer, "origin", new Point(originX, originY)); writer.startElement("mask"); { writer.putElement("separate", sprite.get(PSprite.SEPARATE_MASK)); writer.putElement("shape", sprite.get(PSprite.SHAPE)); writer.startElement("bounds"); { Sprite.BBMode mode = sprite.get(PSprite.BB_MODE); writer.putAttribute("mode", mode); writer.putAttribute("alphaTolerance", sprite.get(PSprite.ALPHA_TOLERANCE)); if (mode == Sprite.BBMode.MANUAL || !GmkSplitter.omitDisabledFields) { writer.putElement("left", sprite.get(PSprite.BB_LEFT)); writer.putElement("right", sprite.get(PSprite.BB_RIGHT)); writer.putElement("top", sprite.get(PSprite.BB_TOP)); writer.putElement("bottom", sprite.get(PSprite.BB_BOTTOM)); } } writer.endElement(); } writer.endElement(); writer.putElement("preload", sprite.get(PSprite.PRELOAD)); writer.putElement("smoothEdges", sprite.get(PSprite.SMOOTH_EDGES)); writer.putElement("transparent", sprite.get(PSprite.TRANSPARENT)); } writer.endElement(); } @Override public Sprite read(XmlReader reader, DeferredReferenceCreatorNotifier notifier) { Sprite sprite = new Sprite(); reader.enterElement("sprite"); { readIdAttribute(sprite, reader); Point origin = readPoint(reader, "origin"); sprite.put(PSprite.ORIGIN_X, origin.x); sprite.put(PSprite.ORIGIN_Y, origin.y); reader.enterElement("mask"); { sprite.put(PSprite.SEPARATE_MASK, reader.getBoolElement("separate")); String shape = reader.getStringElement("shape"); sprite.put(PSprite.SHAPE, Sprite.MaskShape.valueOf(shape)); reader.enterElement("bounds"); { Sprite.BBMode mode = Sprite.BBMode.valueOf(reader.getStringAttribute("mode")); sprite.put(PSprite.BB_MODE, mode); sprite.put(PSprite.ALPHA_TOLERANCE, reader.getIntAttribute("alphaTolerance")); if (mode == Sprite.BBMode.MANUAL || !GmkSplitter.omitDisabledFields) { sprite.put(PSprite.BB_LEFT, reader.getIntElement("left")); sprite.put(PSprite.BB_RIGHT, reader.getIntElement("right")); sprite.put(PSprite.BB_TOP, reader.getIntElement("top")); sprite.put(PSprite.BB_BOTTOM, reader.getIntElement("bottom")); } } reader.leaveElement(); } reader.leaveElement(); sprite.put(PSprite.PRELOAD, reader.getBoolElement("preload")); sprite.put(PSprite.SMOOTH_EDGES, reader.getBoolElement("smoothEdges")); sprite.put(PSprite.TRANSPARENT, reader.getBoolElement("transparent")); } reader.leaveElement(); return sprite; } }