Created tileset repository that loads tiles from tileset bundles. It
obtains the bundles from the resource manager using the new resource set facilities. Oh, it's all so resourceful. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@628 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -0,0 +1,115 @@
|
|||||||
|
//
|
||||||
|
// $Id: BundledTileSetRepository.java,v 1.1 2001/11/20 03:47:38 mdb Exp $
|
||||||
|
|
||||||
|
package com.threerings.media.tile.bundle;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import com.samskivert.io.PersistenceException;
|
||||||
|
import com.samskivert.util.CompoundIterator;
|
||||||
|
import com.samskivert.util.CompoundIterator.IteratorProvider;
|
||||||
|
|
||||||
|
import com.threerings.resource.ResourceBundle;
|
||||||
|
import com.threerings.resource.ResourceManager;
|
||||||
|
|
||||||
|
import com.threerings.media.Log;
|
||||||
|
import com.threerings.media.tile.NoSuchTileSetException;
|
||||||
|
import com.threerings.media.tile.TileSet;
|
||||||
|
import com.threerings.media.tile.TileSetRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads tileset data from a set of resource bundles.
|
||||||
|
*
|
||||||
|
* @see ResourceManager
|
||||||
|
*/
|
||||||
|
public class BundledTileSetRepository
|
||||||
|
implements TileSetRepository
|
||||||
|
{
|
||||||
|
/** The path to the metadata resource that we will attempt to load
|
||||||
|
* from our resource set. */
|
||||||
|
public static final String METADATA_PATH = "tsbundles.dat";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a repository which will obtain its resource set from the
|
||||||
|
* supplied resource manager.
|
||||||
|
*
|
||||||
|
* @param rmgr the resource manager from which to obtain our resource
|
||||||
|
* set.
|
||||||
|
* @param name the name of the resource set from which we will be
|
||||||
|
* loading our tile data.
|
||||||
|
*/
|
||||||
|
public BundledTileSetRepository (ResourceManager rmgr, String name)
|
||||||
|
{
|
||||||
|
// first we obtain the resource set from which we will load up our
|
||||||
|
// tileset bundles
|
||||||
|
ResourceBundle[] rbundles = rmgr.getResourceSet(name);
|
||||||
|
|
||||||
|
// iterate over the resource bundles in the set, loading up the
|
||||||
|
// tileset bundles in each resource bundle
|
||||||
|
ArrayList tbundles = new ArrayList();;
|
||||||
|
for (int i = 0; i < rbundles.length; i++) {
|
||||||
|
try {
|
||||||
|
// unserialize the tileset bundles array
|
||||||
|
InputStream tbin = rbundles[i].getResource(METADATA_PATH);
|
||||||
|
ObjectInputStream oin = new ObjectInputStream(
|
||||||
|
new BufferedInputStream(tbin));
|
||||||
|
TileSetBundle[] tsb = (TileSetBundle[])oin.readObject();
|
||||||
|
|
||||||
|
// add these to the big fat list and initialize them
|
||||||
|
for (int t = 0; t < tsb.length; t++) {
|
||||||
|
tsb[t].init(rbundles[i]);
|
||||||
|
tbundles.add(tsb[t]);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.warning("Unable to load tileset bundles from resource " +
|
||||||
|
"bundle [rbundle=" + rbundles[i] +
|
||||||
|
", error=" + e + "].");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// finally create one big fat array of all of the tileset bundles
|
||||||
|
_bundles = new TileSetBundle[tbundles.size()];
|
||||||
|
tbundles.toArray(_bundles);
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
public Iterator enumerateTileSets ()
|
||||||
|
throws PersistenceException
|
||||||
|
{
|
||||||
|
return new CompoundIterator(new IteratorProvider() {
|
||||||
|
public Iterator nextIterator () {
|
||||||
|
if (_bidx < _bundles.length) {
|
||||||
|
return _bundles[_bidx++].enumerateTileSets();
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
protected int _bidx = 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
public TileSet getTileSet (int tileSetId)
|
||||||
|
throws NoSuchTileSetException, PersistenceException
|
||||||
|
{
|
||||||
|
TileSet tset = null;
|
||||||
|
int blength = _bundles.length;
|
||||||
|
for (int i = 0; i < blength; i++) {
|
||||||
|
tset = _bundles[i].getTileSet(tileSetId);
|
||||||
|
if (tset != null) {
|
||||||
|
return tset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new NoSuchTileSetException(tileSetId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** An array of tileset bundles from which we obtain tilesets. */
|
||||||
|
protected TileSetBundle[] _bundles;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user