From 05f3a6aa256cd3aa8b494e55742229662909bcf4 Mon Sep 17 00:00:00 2001 From: Walter Korman Date: Tue, 24 Jul 2001 16:10:19 +0000 Subject: [PATCH] Altered persistent storage of scenes to be handled by the SceneRepository. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@117 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- rsrc/config/miso/miso.properties | 9 +- .../miso/client/CompiledSceneManager.java | 8 -- .../miso/client/DisplayMisoSceneImpl.java | 132 ++---------------- .../miso/client/EditableSceneManager.java | 68 --------- .../threerings/miso/client/SceneManager.java | 59 +++++--- .../miso/client/SceneManagerImpl.java | 54 ------- .../threerings/miso/client/SceneParser.java | 22 --- .../miso/client/SceneRepository.java | 12 ++ .../miso/client/SceneRepositoryImpl.java | 32 +++++ .../miso/client/XMLSceneParser.java | 16 --- .../miso/client/XMLSceneWriter.java | 93 ------------ .../miso/tools/xml/XMLSceneParser.java | 18 +++ .../miso/tools/xml/XMLSceneRepository.java | 74 ++++++++++ .../miso/tools/xml/XMLSceneWriter.java | 79 +++++++++++ .../com/threerings/miso/util/MisoUtil.java | 18 ++- 15 files changed, 283 insertions(+), 411 deletions(-) delete mode 100644 src/java/com/threerings/miso/client/CompiledSceneManager.java delete mode 100644 src/java/com/threerings/miso/client/EditableSceneManager.java delete mode 100644 src/java/com/threerings/miso/client/SceneManagerImpl.java delete mode 100644 src/java/com/threerings/miso/client/SceneParser.java create mode 100644 src/java/com/threerings/miso/client/SceneRepository.java create mode 100644 src/java/com/threerings/miso/client/SceneRepositoryImpl.java delete mode 100644 src/java/com/threerings/miso/client/XMLSceneParser.java delete mode 100644 src/java/com/threerings/miso/client/XMLSceneWriter.java create mode 100644 src/java/com/threerings/miso/tools/xml/XMLSceneParser.java create mode 100644 src/java/com/threerings/miso/tools/xml/XMLSceneRepository.java create mode 100644 src/java/com/threerings/miso/tools/xml/XMLSceneWriter.java diff --git a/rsrc/config/miso/miso.properties b/rsrc/config/miso/miso.properties index df7e78687..b64948cef 100644 --- a/rsrc/config/miso/miso.properties +++ b/rsrc/config/miso/miso.properties @@ -1,5 +1,5 @@ # -# $Id: miso.properties,v 1.8 2001/07/23 22:31:47 shaper Exp $ +# $Id: miso.properties,v 1.9 2001/07/24 16:10:19 shaper Exp $ # # Initial test config values for miso development. # @@ -7,8 +7,11 @@ # the tileset manager class for working with tilesets tilesetmgr = com.threerings.miso.tile.EditableTileSetManager -# the scene manager class for working with scenes -scenemgr = com.threerings.miso.scene.EditableSceneManager +# the scene repository class that handles scene storage +scenerepo = com.threerings.miso.scene.xml.XMLFileSceneRepository + +# the directory containing scene description files +sceneroot = rsrc/scenes # the tileset descriptions tilesets = rsrc/config/miso/tilesets.xml diff --git a/src/java/com/threerings/miso/client/CompiledSceneManager.java b/src/java/com/threerings/miso/client/CompiledSceneManager.java deleted file mode 100644 index 2520c882c..000000000 --- a/src/java/com/threerings/miso/client/CompiledSceneManager.java +++ /dev/null @@ -1,8 +0,0 @@ -// -// $Id: CompiledSceneManager.java,v 1.5 2001/07/23 18:52:51 shaper Exp $ - -package com.threerings.miso.scene; - -public class CompiledSceneManager extends SceneManagerImpl -{ -} diff --git a/src/java/com/threerings/miso/client/DisplayMisoSceneImpl.java b/src/java/com/threerings/miso/client/DisplayMisoSceneImpl.java index 5712d8a26..3f74f839b 100644 --- a/src/java/com/threerings/miso/client/DisplayMisoSceneImpl.java +++ b/src/java/com/threerings/miso/client/DisplayMisoSceneImpl.java @@ -1,5 +1,5 @@ // -// $Id: DisplayMisoSceneImpl.java,v 1.10 2001/07/23 22:31:47 shaper Exp $ +// $Id: DisplayMisoSceneImpl.java,v 1.11 2001/07/24 16:10:19 shaper Exp $ package com.threerings.miso.scene; @@ -97,130 +97,24 @@ public class Scene return numTiles; } - /** - * Populate the scene object by reading the contents from the given - * input stream. - */ - public void readFrom (InputStream in) throws IOException + public static int getNumLayers () { - DataInputStream dis = new DataInputStream(in); - - // read scene header information - _name = dis.readUTF(); - _sid = dis.readShort(); - short version = dis.readShort(); - - // make sure we can understand the file format - if (version < 0 || version > VERSION) { - throw new IOException("Can't understand scene file format " + - " [version=" + version + "]"); - } - - // allocate full tile array. null tiles denote tiles in absentia. - tiles = new Tile[TILE_WIDTH][TILE_HEIGHT][NUM_LAYERS]; - - // read all tiles for the base layer - for (int xx = 0; xx < TILE_WIDTH; xx++) { - for (int yy = 0; yy < TILE_HEIGHT; yy++) { - // read tile details - short tsid = dis.readShort(); - short tid = dis.readShort(); - - // retrieve tile from tile manager - tiles[xx][yy][LAYER_BASE] = _tilemgr.getTile(tsid, tid); - } - } - - // read tiles for each of the subsequent layers - for (int lnum = 1; lnum < NUM_LAYERS; lnum++) { - // read the number of tiles in this layer - int numTiles = dis.readShort(); - - for (int ii = 0; ii < numTiles; ii++) { - // read tile details - short tsid = dis.readShort(); - short tid = dis.readShort(); - byte tx = dis.readByte(); - byte ty = dis.readByte(); - - // retrieve tile from tile manager - tiles[tx][ty][lnum] = _tilemgr.getTile(tsid, tid); - } - } - - // read hotspot points - short numSpots = dis.readShort(); - _hotspots = new Point[numSpots]; - for (int ii = 0; ii < numSpots; ii++) { - _hotspots[ii] = new Point(); - _hotspots[ii].x = dis.readByte(); - _hotspots[ii].y = dis.readByte(); - } - - // read exit points - short numExits = dis.readShort(); - _exits = new ExitPoint[numExits]; - for (int ii = 0; ii < numExits; ii++) { - _exits[ii] = new ExitPoint(); - _exits[ii].x = dis.readByte(); - _exits[ii].y = dis.readByte(); - _exits[ii].sid = dis.readShort(); - } + return NUM_LAYERS; } - /** - * Write this scene object to the specified output stream. - */ - public void writeTo (OutputStream out) throws IOException + public static int getVersion () { - DataOutputStream dos = new DataOutputStream(out); + return VERSION; + } - // write scene header information - dos.writeUTF(_name); - dos.writeShort(_sid); - dos.writeShort(VERSION); + public static int getTileWidth () + { + return TILE_WIDTH; + } - // write tiles for the base layer - for (int xx = 0; xx < TILE_WIDTH; xx++) { - for (int yy = 0; yy < TILE_HEIGHT; yy++) { - Tile tile = tiles[xx][yy][LAYER_BASE]; - dos.writeShort(tile.tsid); - dos.writeShort(tile.tid); - } - } - - // write tiles for each of the subsequent layers - for (int lnum = 1; lnum < NUM_LAYERS; lnum++) { - // write the number of tiles in this layer - dos.writeShort(getNumLayerTiles(lnum)); - - for (int xx = 0; xx < TILE_WIDTH; xx++) { - for (int yy = 0; yy < TILE_HEIGHT; yy++) { - Tile tile = tiles[xx][yy][lnum]; - if (tile != null) { - dos.writeShort(tile.tsid); - dos.writeShort(tile.tid); - } - } - } - } - - // write hotspot points - int numSpots = (_hotspots == null) ? 0 : _hotspots.length; - dos.writeShort(numSpots); - for (int ii = 0; ii < numSpots; ii++) { - dos.writeByte(_hotspots[ii].x); - dos.writeByte(_hotspots[ii].y); - } - - // write exit points - int numExits = (_exits == null) ? 0 : _exits.length; - dos.writeShort(numExits); - for (int ii = 0; ii < numExits; ii++) { - dos.writeByte(_exits[ii].x); - dos.writeByte(_exits[ii].y); - dos.writeByte(_exits[ii].sid); - } + public static int getTileHeight () + { + return TILE_HEIGHT; } /** The latest scene file format version. */ diff --git a/src/java/com/threerings/miso/client/EditableSceneManager.java b/src/java/com/threerings/miso/client/EditableSceneManager.java deleted file mode 100644 index 3e141c6ec..000000000 --- a/src/java/com/threerings/miso/client/EditableSceneManager.java +++ /dev/null @@ -1,68 +0,0 @@ -// -// $Id: EditableSceneManager.java,v 1.6 2001/07/23 22:31:47 shaper Exp $ - -package com.threerings.miso.scene; - -import java.io.IOException; -import java.util.ArrayList; - -import com.threerings.miso.Log; - -/** - * The EditableSceneManager extends general scene manager - * functionality to allow reading scenes from and writing scenes to - * XML files. - */ -public class EditableSceneManager extends SceneManagerImpl -{ - /** - * Load all scenes described in the specified XML file into the - * hashtable of scenes currently available. - * - * @param fname the file to load scenes from. - */ - public void loadScenes (String fname) throws IOException - { - ArrayList scenes = null; - _sid = 0; - try { - scenes = new XMLSceneParser().loadScenes(fname); - } catch (IOException ioe) { - Log.warning("Exception loading scenes [fname=" + fname + - ", ioe=" + ioe + "]."); - return; - } - - // bail if we didn't find any scenes - int size = scenes.size(); - if (size == 0) { - Log.warning("No scenes found [fname=" + fname + "]."); - return; - } - - // copy new scenes into the main scene hashtable - for (int ii = 0; ii < size; ii++) { - Scene scene = (Scene)scenes.get(ii); - _scenes.put(scene.getId(), scene); - Log.info("Adding scene to cache [scene=" + scene + "]."); - } - } - - /** - * Write all scenes currently available to the specified file in - * XML format. - * - * @param fname the file to write the scenes to. - */ - public void writeAllScenes (String fname) - { - try { - ArrayList scenes = getAllScenes(); - new XMLSceneWriter(scenes).writeToFile(fname); - - } catch (IOException ioe) { - Log.warning("Exception writing scenes to file [fname=" + - fname + ", ioe=" + ioe + "]."); - } - } -} diff --git a/src/java/com/threerings/miso/client/SceneManager.java b/src/java/com/threerings/miso/client/SceneManager.java index 19e7768db..069dbb991 100644 --- a/src/java/com/threerings/miso/client/SceneManager.java +++ b/src/java/com/threerings/miso/client/SceneManager.java @@ -1,40 +1,57 @@ // -// $Id: SceneManager.java,v 1.6 2001/07/23 22:31:47 shaper Exp $ +// $Id: SceneManager.java,v 1.7 2001/07/24 16:10:19 shaper Exp $ package com.threerings.miso.scene; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; +import com.samskivert.util.IntMap; /** - * Manages the various scenes that are displayed during the game and - * provides simplified retrieval and caching facilities. + * The SceneManager provides a single access point for retrieving and + * caching the various scenes that make up a game. */ -public interface SceneManager +public class SceneManager { /** - * Return an ArrayList containing all Scene objects available. + * Initialize the SceneManager with the given scene repository. * - * @return the list of scenes. + * @param repo the scene repository. */ - public ArrayList getAllScenes (); - - /** - * Return a new Scene object with the next unique scene id. The - * scene id is only guaranteed to be unique in the context of the - * scenes currently available via this SceneManager. - */ - public Scene getNewScene (); + public SceneManager (SceneRepository repo) + { + _repo = repo; + } /** * Return the Scene object for the specified scene id. + * + * @param sid the scene id. + * @return the Scene object. */ - public Scene getScene (int sid); + public Scene getScene (int sid) + { + // TBD + return null; + } + + public SceneRepository getSceneRepository () + { + return _repo; + } /** - * Return a String array of all layer names ordered by ascending - * layer id. + * Return a String array of all scene layer names ordered by + * ascending layer id. + * + * @return the layer names. */ - public String[] getLayerNames (); + public String[] getLayerNames () + { + return Scene.XLATE_LAYERS; + } + + /** The repository used to read and write scenes. */ + protected SceneRepository _repo; + + /** The currently cached scenes. */ + protected IntMap _scenes = new IntMap(); } diff --git a/src/java/com/threerings/miso/client/SceneManagerImpl.java b/src/java/com/threerings/miso/client/SceneManagerImpl.java deleted file mode 100644 index 9927d1fe5..000000000 --- a/src/java/com/threerings/miso/client/SceneManagerImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -// -// $Id: SceneManagerImpl.java,v 1.6 2001/07/23 22:31:47 shaper Exp $ - -package com.threerings.miso.scene; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; - -import com.samskivert.util.*; -import com.threerings.miso.Log; -import com.threerings.miso.tile.TileManager; - -public abstract class SceneManagerImpl implements SceneManager -{ - public void init (TileManager tilemgr) - { - _tilemgr = tilemgr; - } - - public Scene getScene (int sid) - { - // TBD - return null; - } - - public String[] getLayerNames () - { - return Scene.XLATE_LAYERS; - } - - public ArrayList getAllScenes () - { - ArrayList list = new ArrayList(); - CollectionUtil.addAll(list, _scenes.elements()); - return list; - } - - public Scene getNewScene () - { - Scene scene = new Scene(_tilemgr, _sid); - _scenes.put(_sid++, scene); - return scene; - } - - /** The next monotonically-increasing scene id. */ - protected int _sid = 0; - - /** The tile manager for use by all scenes. */ - protected TileManager _tilemgr; - - /** The scenes currently available. */ - protected IntMap _scenes = new IntMap(); -} diff --git a/src/java/com/threerings/miso/client/SceneParser.java b/src/java/com/threerings/miso/client/SceneParser.java deleted file mode 100644 index 9bb1873e4..000000000 --- a/src/java/com/threerings/miso/client/SceneParser.java +++ /dev/null @@ -1,22 +0,0 @@ -// -// $Id: SceneParser.java,v 1.1 2001/07/23 22:45:04 shaper Exp $ - -package com.threerings.miso.scene; - -import java.io.IOException; -import java.util.ArrayList; - -/** - * The SceneParser is a general interface to be implemented by classes - * that load scene descriptions in a particular format from a file. - */ -public interface SceneParser -{ - /** - * Read scene description data from the given file and construct - * Scene objects to suit. Return an ArrayList of all Scene - * objects constructed, or a zero-length array if no scene - * descriptions were fully parsed. - */ - public ArrayList loadScenes (String fname) throws IOException; -} diff --git a/src/java/com/threerings/miso/client/SceneRepository.java b/src/java/com/threerings/miso/client/SceneRepository.java new file mode 100644 index 000000000..c1cf0bd08 --- /dev/null +++ b/src/java/com/threerings/miso/client/SceneRepository.java @@ -0,0 +1,12 @@ +// +// $Id: SceneRepository.java,v 1.1 2001/07/24 16:10:19 shaper Exp $ + +package com.threerings.miso.scene; + +/** + * The SceneRepository interface manages persistent scene storage. + */ +public interface SceneRepository +{ + // TBD +} diff --git a/src/java/com/threerings/miso/client/SceneRepositoryImpl.java b/src/java/com/threerings/miso/client/SceneRepositoryImpl.java new file mode 100644 index 000000000..13ee019a9 --- /dev/null +++ b/src/java/com/threerings/miso/client/SceneRepositoryImpl.java @@ -0,0 +1,32 @@ +// +// $Id: SceneRepositoryImpl.java,v 1.1 2001/07/24 16:10:19 shaper Exp $ + +package com.threerings.miso.scene; + +import com.samskivert.util.Config; +import com.threerings.miso.tile.TileManager; + +public abstract class SceneRepositoryImpl implements SceneRepository +{ + /** + * Initialize the SceneRepository with the given config and tile + * manager objects. The root scene + * directory is read from the given config object, and the tile + * manager is used to obtain tiles when constructing scene objects + * from files. + * + * @param config the config object. + * @param tilemgr the tile manager object. + */ + public void init (Config config, TileManager tilemgr) + { + _config = config; + _tilemgr = tilemgr; + } + + /** The config object. */ + protected Config _config; + + /** The tile manager from which the scenes obtain their tiles. */ + protected TileManager _tilemgr; +} diff --git a/src/java/com/threerings/miso/client/XMLSceneParser.java b/src/java/com/threerings/miso/client/XMLSceneParser.java deleted file mode 100644 index 8cd7fd69f..000000000 --- a/src/java/com/threerings/miso/client/XMLSceneParser.java +++ /dev/null @@ -1,16 +0,0 @@ -// -// $Id: XMLSceneParser.java,v 1.2 2001/07/23 22:47:03 shaper Exp $ - -package com.threerings.miso.scene; - -import java.io.IOException; -import java.util.ArrayList; - -public class XMLSceneParser implements SceneParser -{ - public ArrayList loadScenes (String fname) throws IOException - { - // TBD - return null; - } -} diff --git a/src/java/com/threerings/miso/client/XMLSceneWriter.java b/src/java/com/threerings/miso/client/XMLSceneWriter.java deleted file mode 100644 index 2fa690f47..000000000 --- a/src/java/com/threerings/miso/client/XMLSceneWriter.java +++ /dev/null @@ -1,93 +0,0 @@ -// -// $Id: XMLSceneWriter.java,v 1.1 2001/07/23 22:45:04 shaper Exp $ - -package com.threerings.miso.scene; - -import java.io.*; -import java.util.ArrayList; - -import com.megginson.sax.DataWriter; -import org.xml.sax.*; -import org.xml.sax.helpers.AttributesImpl; - -import com.samskivert.util.StringUtil; -import com.threerings.miso.Log; - -/** - * The XMLSceneWriter writes a list of Scene objects to an XML file - * using Megginson Technologies' XMLWriter class functionality. - */ -public class XMLSceneWriter extends DataWriter -{ - /** - * Construct an XMLSceneWriter object that will be used to write - * the specified set of scenes to an XML file. - * - * @param scenes the scenes to be written. - */ - public XMLSceneWriter (ArrayList scenes) - { - _scenes = scenes; - setIndentStep(2); - } - - /** - * Write the scenes to the specified output file in XML format. - * - * @param fname the absolute pathname of the file to write to. - */ - public void writeToFile (String fname) throws IOException - { - FileOutputStream fos = new FileOutputStream(fname); - setOutput(new OutputStreamWriter(fos)); - - try { - startDocument(); - startElement("scenegroup"); - - int size = _scenes.size(); - for (int ii = 0; ii < size; ii++) { - startElement("scene"); - - Scene scene = (Scene)_scenes.get(ii); - - dataElement("name", scene.getName()); - dataElement("sid", "" + scene.getId()); - dataElement("version", "" + scene.VERSION); - dataElement("hotspots", - StringUtil.toString(scene.getHotSpots())); - dataElement("exits", StringUtil.toString(scene.getExits())); - - startElement("tiles"); - for (int jj = 0; jj < Scene.NUM_LAYERS; jj++) { - AttributesImpl attrs = new AttributesImpl(); - attrs.addAttribute("", "lnum", "", "CDATA", "" + jj); - - startElement("", "layer", "", attrs); - for (int yy = 0; yy < Scene.TILE_HEIGHT; yy++) { - attrs.clear(); - attrs.addAttribute("", "rownum", "", "CDATA", "" + yy); - - startElement("", "row", "", attrs); - // TODO: write row data. - endElement("row"); - } - endElement("layer"); - } - endElement("tiles"); - - endElement("scene"); - } - - endElement("scenegroup"); - endDocument(); - - } catch (SAXException saxe) { - Log.warning("Exception writing scenes to file [fname=" + - fname + ", saxe=" + saxe + "]."); - } - } - - /** The scenes to be written. */ - protected ArrayList _scenes; -} diff --git a/src/java/com/threerings/miso/tools/xml/XMLSceneParser.java b/src/java/com/threerings/miso/tools/xml/XMLSceneParser.java new file mode 100644 index 000000000..4c45bf10a --- /dev/null +++ b/src/java/com/threerings/miso/tools/xml/XMLSceneParser.java @@ -0,0 +1,18 @@ +// +// $Id: XMLSceneParser.java,v 1.1 2001/07/24 16:10:19 shaper Exp $ + +package com.threerings.miso.scene.xml; + +import java.io.IOException; +import java.util.ArrayList; + +import com.threerings.miso.scene.Scene; + +public class XMLSceneParser +{ + public Scene loadScene (String fname) throws IOException + { + // TBD + return null; + } +} diff --git a/src/java/com/threerings/miso/tools/xml/XMLSceneRepository.java b/src/java/com/threerings/miso/tools/xml/XMLSceneRepository.java new file mode 100644 index 000000000..aca72a7db --- /dev/null +++ b/src/java/com/threerings/miso/tools/xml/XMLSceneRepository.java @@ -0,0 +1,74 @@ +// +// $Id: XMLSceneRepository.java,v 1.1 2001/07/24 16:10:19 shaper Exp $ + +package com.threerings.miso.scene.xml; + +import java.io.IOException; +import java.util.ArrayList; + +import com.samskivert.util.Config; +import com.threerings.miso.Log; +import com.threerings.miso.scene.Scene; +import com.threerings.miso.scene.SceneRepositoryImpl; +import com.threerings.miso.tile.TileManager; + +/** + * The XMLFileSceneRepository provides a mechanism for reading scenes + * from and writing scenes to XML files. These files will comprise + * the template scene files from which actual runtime game scenes will + * be constructed. + */ +public class XMLFileSceneRepository extends SceneRepositoryImpl +{ + /** + * Initialize the XMLFileSceneRepository with the given config and + * tile manager objects. + * + * @param config the config object. + * @param tilemgr the tile manager object. + */ + public void init (Config config, TileManager tilemgr) + { + super.init(config, tilemgr); + _root = _config.getValue(CONFIG_ROOT, DEF_ROOT); + } + + /** + * Loads and returns a Scene object for the scene described in the + * specified XML file. + * + * @param fname the full pathname to the file. + * @return the Scene object. + */ + public Scene loadScene (String fname) throws IOException + { + return _parser.loadScene(fname); + } + + /** + * Writes a scene to the specified file in the scene root + * directory in XML format. + * + * @param scene the scene to save. + * @param fname the file to write the scene to. + */ + public void saveScene (Scene scene, String fname) throws IOException + { + _writer.saveScene(scene, fname); + } + + /** The config key for the root scene directory. */ + protected static final String CONFIG_ROOT = "miso.sceneroot"; + + /** The default root scene directory path. */ + protected static final String DEF_ROOT = "rsrc/scenes"; + + /** The root scene directory path. */ + protected String _root; + + /** The parser object for reading scenes from files. */ + protected XMLSceneParser _parser; + + /** The writer object for writing scenes to files. */ + protected XMLSceneWriter _writer; +} diff --git a/src/java/com/threerings/miso/tools/xml/XMLSceneWriter.java b/src/java/com/threerings/miso/tools/xml/XMLSceneWriter.java new file mode 100644 index 000000000..3885b023b --- /dev/null +++ b/src/java/com/threerings/miso/tools/xml/XMLSceneWriter.java @@ -0,0 +1,79 @@ +// +// $Id: XMLSceneWriter.java,v 1.1 2001/07/24 16:10:19 shaper Exp $ + +package com.threerings.miso.scene.xml; + +import java.io.*; +import java.util.ArrayList; + +import com.megginson.sax.DataWriter; +import org.xml.sax.*; +import org.xml.sax.helpers.AttributesImpl; + +import com.samskivert.util.StringUtil; +import com.threerings.miso.Log; +import com.threerings.miso.scene.Scene; + +/** + * The XMLSceneWriter writes a Scene object to an XML file. + */ +public class XMLSceneWriter extends DataWriter +{ + /** + * Construct an XMLSceneWriter object. + */ + public XMLSceneWriter () + { + setIndentStep(2); + } + + /** + * Write the scenes to the specified output file in XML format. + * + * @param fname the file to write to. + */ + public void saveScene (Scene scene, String fname) throws IOException + { + FileOutputStream fos = new FileOutputStream(fname); + setOutput(new OutputStreamWriter(fos)); + + try { + startDocument(); + + startElement("scene"); + + dataElement("name", scene.getName()); + dataElement("sid", "" + scene.getId()); + dataElement("version", "" + Scene.getVersion()); + dataElement("hotspots", + StringUtil.toString(scene.getHotSpots())); + dataElement("exits", StringUtil.toString(scene.getExits())); + + startElement("tiles"); + for (int jj = 0; jj < Scene.getNumLayers(); jj++) { + AttributesImpl attrs = new AttributesImpl(); + attrs.addAttribute("", "lnum", "", "CDATA", "" + jj); + + startElement("", "layer", "", attrs); + for (int yy = 0; yy < Scene.getTileHeight(); yy++) { + attrs.clear(); + attrs.addAttribute("", "rownum", "", "CDATA", "" + yy); + + startElement("", "row", "", attrs); + // TODO: write row data. + endElement("row"); + } + endElement("layer"); + } + endElement("tiles"); + + endElement("scene"); + endDocument(); + + } catch (SAXException saxe) { + Log.warning("Exception writing scene to file " + + "[scene=" + scene + ", [fname=" + fname + + ", saxe=" + saxe + "]."); + } + } +} diff --git a/src/java/com/threerings/miso/util/MisoUtil.java b/src/java/com/threerings/miso/util/MisoUtil.java index 28c369ae7..0d04d5f38 100644 --- a/src/java/com/threerings/miso/util/MisoUtil.java +++ b/src/java/com/threerings/miso/util/MisoUtil.java @@ -1,5 +1,5 @@ // -// $Id: MisoUtil.java,v 1.3 2001/07/23 22:31:48 shaper Exp $ +// $Id: MisoUtil.java,v 1.4 2001/07/24 16:10:19 shaper Exp $ package com.threerings.miso.util; @@ -12,6 +12,7 @@ import com.samskivert.util.*; import com.threerings.media.ImageManager; import com.threerings.miso.Log; import com.threerings.miso.scene.*; +import com.threerings.miso.scene.xml.XMLFileSceneRepository; import com.threerings.miso.tile.*; import com.threerings.resource.ResourceManager; @@ -43,11 +44,14 @@ public class MisoUtil createSceneManager (Config config, TileManager tilemgr) { try { - SceneManagerImpl scenemgr = (SceneManagerImpl) - config.instantiateValue("miso.scenemgr", DEF_SCENEMGR); - scenemgr.init(tilemgr); + SceneRepositoryImpl scenerepo = (SceneRepositoryImpl) + config.instantiateValue("miso.scenerepo", DEF_SCENEREPO); + scenerepo.init(config, tilemgr); + + SceneManager scenemgr = new SceneManager(scenerepo); + return scenemgr; - + } catch (Exception e) { Log.warning("Failed to instantiate scene manager [e=" + e + "]."); return null; @@ -119,8 +123,8 @@ public class MisoUtil } /** The default SceneManager class name. */ - protected static final String DEF_SCENEMGR = - CompiledSceneManager.class.getName(); + protected static final String DEF_SCENEREPO = + XMLFileSceneRepository.class.getName(); /** The default TileSetManager class name. */ protected static final String DEF_TILESETMGR =