From 70ef6a644a5e2ba32acf93fa5e3e51c47541a714 Mon Sep 17 00:00:00 2001 From: Charlie Groves Date: Fri, 6 Jun 2008 21:16:45 +0000 Subject: [PATCH] Widened and genericized git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@528 ed5b42cb-e716-0410-a449-f6a68f950b19 --- .../threerings/media/tile/TileManager.java | 128 ++++++++---------- 1 file changed, 56 insertions(+), 72 deletions(-) diff --git a/src/java/com/threerings/media/tile/TileManager.java b/src/java/com/threerings/media/tile/TileManager.java index 51d71bf5..81f5036f 100644 --- a/src/java/com/threerings/media/tile/TileManager.java +++ b/src/java/com/threerings/media/tile/TileManager.java @@ -21,40 +21,37 @@ package com.threerings.media.tile; -import java.lang.ref.SoftReference; +import static com.threerings.media.Log.log; -import java.util.HashMap; +import java.lang.ref.SoftReference; +import java.util.Map; + +import com.google.common.collect.Maps; import com.samskivert.io.PersistenceException; import com.threerings.media.image.ImageManager; -import static com.threerings.media.Log.log; - /** - * The tile manager provides a simplified interface for retrieving and - * caching tiles. Tiles can be loaded in two different ways. An - * application can load a tileset by hand, specifying the path to the - * tileset image and all of the tileset metadata necessary for extracting - * the image tiles, or it can provide a tileset repository which loads up - * tilesets using whatever repository mechanism is implemented by the - * supplied repository. In the latter case, tilesets are loaded by a - * unique identifier. - * - *

Loading tilesets by hand is intended for things like toolbar icons - * or games with a single set of tiles (think Stratego, for example). - * Loading tilesets from a repository supports games with vast numbers of - * tiles to which more tiles may be added on the fly (think the tiles for - * an isometric-display graphical MUD). + * The tile manager provides a simplified interface for retrieving and caching tiles. Tiles can be + * loaded in two different ways. An application can load a tileset by hand, specifying the path to + * the tileset image and all of the tileset metadata necessary for extracting the image tiles, or + * it can provide a tileset repository which loads up tilesets using whatever repository mechanism + * is implemented by the supplied repository. In the latter case, tilesets are loaded by a unique + * identifier. + * + *

Loading tilesets by hand is intended for things like toolbar icons or games with a single + * set of tiles (think Stratego, for example). Loading tilesets from a repository supports games + * with vast numbers of tiles to which more tiles may be added on the fly (think the tiles for an + * isometric-display graphical MUD). */ public class TileManager { /** - * Creates a tile manager and provides it with a reference to the - * image manager from which it will load tileset images. - * - * @param imgr the image manager via which the tile manager will - * decode and cache images. + * Creates a tile manager and provides it with a reference to the image manager from which it + * will load tileset images. + * + * @param imgr the image manager via which the tile manager will decode and cache images. */ public TileManager (ImageManager imgr) { @@ -63,8 +60,7 @@ public class TileManager } /** - * Loads up a tileset from the specified image with the specified - * metadata parameters. + * Loads up a tileset from the specified image with the specified metadata parameters. */ public UniformTileSet loadTileSet (String imgPath, int width, int height) { @@ -72,14 +68,12 @@ public class TileManager } /** - * Loads up a tileset from the specified image (located in the - * specified resource set) with the specified metadata parameters. + * Loads up a tileset from the specified image (located in the specified resource set) with + * the specified metadata parameters. */ - public UniformTileSet loadTileSet ( - String rset, String imgPath, int width, int height) + public UniformTileSet loadTileSet (String rset, String imgPath, int width, int height) { - return loadTileSet( - getImageProvider(rset), rset, imgPath, width, height); + return loadTileSet(getImageProvider(rset), rset, imgPath, width, height); } /** @@ -88,8 +82,7 @@ public class TileManager ImageProvider improv, String improvKey, String imgPath, int width, int height) { - UniformTileSet uts = loadCachedTileSet( - improvKey, imgPath, width, height); + UniformTileSet uts = loadCachedTileSet(improvKey, imgPath, width, height); uts.setImageProvider(improv); return uts; } @@ -106,20 +99,19 @@ public class TileManager /** * Used to load and cache tilesets loaded via {@link #loadTileSet}. */ - protected UniformTileSet loadCachedTileSet ( - String bundle, String imgPath, int width, int height) + protected UniformTileSet loadCachedTileSet (String bundle, String imgPath, int width, + int height) { String key = bundle + "::" + imgPath; - SoftReference ref = (SoftReference) _handcache.get(key); - UniformTileSet uts = (ref == null) ? null - : (UniformTileSet) ref.get(); + SoftReference ref = _handcache.get(key); + UniformTileSet uts = (ref == null) ? null : ref.get(); if (uts == null) { uts = new UniformTileSet(); uts.setImageProvider(_defaultProvider); uts.setImagePath(imgPath); uts.setWidth(width); uts.setHeight(height); - _handcache.put(key, new SoftReference(uts)); + _handcache.put(key, new SoftReference(uts)); } return uts; } @@ -129,12 +121,12 @@ public class TileManager */ public void clearCache () { - _handcache = new HashMap(); + _handcache = Maps.newHashMap(); } /** - * Sets the tileset repository that will be used by the tile manager - * when tiles are requested by tileset id. + * Sets the tileset repository that will be used by the tile manager when tiles are requested + * by tileset id. */ public void setTileSetRepository (TileSetRepository setrep) { @@ -150,15 +142,13 @@ public class TileManager } /** - * Returns the tileset with the specified id. Tilesets are fetched - * from the tileset repository supplied via {@link - * #setTileSetRepository}, and are subsequently cached. - * + * Returns the tileset with the specified id. Tilesets are fetched from the tileset repository + * supplied via {@link #setTileSetRepository}, and are subsequently cached. + * * @param tileSetId the unique identifier for the desired tileset. - * - * @exception NoSuchTileSetException thrown if no tileset exists with - * the specified id or if an underlying error occurs with the tileset - * repository's persistence mechanism. + * + * @exception NoSuchTileSetException thrown if no tileset exists with the specified id or if + * an underlying error occurs with the tileset repository's persistence mechanism. */ public TileSet getTileSet (int tileSetId) throws NoSuchTileSetException @@ -171,17 +161,16 @@ public class TileManager try { return _setrep.getTileSet(tileSetId); } catch (PersistenceException pe) { - log.warning("Failure loading tileset [id=" + tileSetId + - ", error=" + pe + "]."); + log.warning("Failure loading tileset", "id", tileSetId, "error", pe); throw new NoSuchTileSetException(tileSetId); } } /** * Returns the tileset with the specified name. - * - * @throws NoSuchTileSetException if no tileset with the specified - * name is available via our configured tile set repository. + * + * @throws NoSuchTileSetException if no tileset with the specified name is available via our + * configured tile set repository. */ public TileSet getTileSet (String name) throws NoSuchTileSetException @@ -194,45 +183,40 @@ public class TileManager try { return _setrep.getTileSet(name); } catch (PersistenceException pe) { - log.warning("Failure loading tileset [name=" + name + - ", error=" + pe + "]."); + log.warning("Failure loading tileset", "name", name, "error", pe); throw new NoSuchTileSetException(name); } } /** - * Returns the {@link Tile} object with the specified fully qualified - * tile id. - * + * Returns the {@link Tile} object with the specified fully qualified tile id. + * * @see TileUtil#getFQTileId */ public Tile getTile (int fqTileId) throws NoSuchTileSetException { - return getTile(TileUtil.getTileSetId(fqTileId), - TileUtil.getTileIndex(fqTileId), null); + return getTile(TileUtil.getTileSetId(fqTileId), TileUtil.getTileIndex(fqTileId), null); } /** - * Returns the {@link Tile} object with the specified fully qualified - * tile id. The supplied colorizer will be used to recolor the tile. - * + * Returns the {@link Tile} object with the specified fully qualified tile id. The supplied + * colorizer will be used to recolor the tile. + * * @see TileUtil#getFQTileId */ public Tile getTile (int fqTileId, TileSet.Colorizer rizer) throws NoSuchTileSetException { - return getTile(TileUtil.getTileSetId(fqTileId), - TileUtil.getTileIndex(fqTileId), rizer); + return getTile(TileUtil.getTileSetId(fqTileId), TileUtil.getTileIndex(fqTileId), rizer); } /** - * Returns the {@link Tile} object from the specified tileset at the - * specified index. - * + * Returns the {@link Tile} object from the specified tileset at the specified index. + * * @param tileSetId the tileset id. * @param tileIndex the index of the tile to be retrieved. - * + * * @return the tile object. */ public Tile getTile (int tileSetId, int tileIndex, TileSet.Colorizer rizer) @@ -246,7 +230,7 @@ public class TileManager protected ImageManager _imgr; /** A cache of tilesets that have been loaded by hand. */ - protected HashMap _handcache = new HashMap(); + protected Map> _handcache = Maps.newHashMap(); /** The tile set repository. */ protected TileSetRepository _setrep;