From 6987d008e20d21cd983b52cb59d0df58f2e65c17 Mon Sep 17 00:00:00 2001 From: Mike Thomas Date: Tue, 13 Jul 2010 22:40:07 +0000 Subject: [PATCH] Let the tile data pack cache images so we aren't reloading them for various individual tiles within the image. Also, a couple minor efficiency improvements elsewhere. git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@949 ed5b42cb-e716-0410-a449-f6a68f950b19 --- .../com/threerings/media/tile/TileDataPack.as | 18 +++++++++++++++++- src/as/com/threerings/media/tile/TileSet.as | 2 +- .../threerings/miso/client/MisoScenePanel.as | 2 -- .../com/threerings/miso/client/SceneBlock.as | 1 + 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/as/com/threerings/media/tile/TileDataPack.as b/src/as/com/threerings/media/tile/TileDataPack.as index 14eab6df..843b9c06 100644 --- a/src/as/com/threerings/media/tile/TileDataPack.as +++ b/src/as/com/threerings/media/tile/TileDataPack.as @@ -36,7 +36,10 @@ import nochump.util.zip.ZipFile; import com.threerings.media.image.PngRecolorUtil; import com.threerings.util.DataPack; +import com.threerings.util.Map; +import com.threerings.util.Maps; import com.threerings.util.MultiLoader; +import com.threerings.util.StringUtil; /** * Like a normal data pack, but we don't deal with any data, and all our filenames are a direct @@ -86,7 +89,17 @@ public class TileDataPack extends DataPack public function getTileSetImage (path :String, zations :Array, callback :Function) :void { - MultiLoader.getContents(PngRecolorUtil.recolorPNG(getFile(path), zations), callback); + var key :String = zations == null ? path : path + ":" + StringUtil.toString(zations); + + if (_cache.containsKey(key)) { + callback(_cache.get(key)); + } else { + MultiLoader.getContents(PngRecolorUtil.recolorPNG(getFile(path), zations), + function(result :Bitmap) :void { + _cache.put(key, result); + callback(result); + }); + } } public function getTileImage (path :String, bounds :Rectangle, zations :Array, @@ -99,5 +112,8 @@ public class TileDataPack extends DataPack callback(new Bitmap(data)); }); } + + /** Cache of images loaded from this data pack. */ + protected var _cache :Map = Maps.newMapOf(String); } } \ No newline at end of file diff --git a/src/as/com/threerings/media/tile/TileSet.as b/src/as/com/threerings/media/tile/TileSet.as index af51d294..84f54bfb 100644 --- a/src/as/com/threerings/media/tile/TileSet.as +++ b/src/as/com/threerings/media/tile/TileSet.as @@ -166,7 +166,7 @@ public /* abstract */ class TileSet // if it's not in the active set, it's not in memory; so load it if (tile == null) { tile = createTile(); - tile.key = new Tile_Key(this, tileIndex, zations); + tile.key = key; initTile(tile, tileIndex, zations); _atiles.put(tile.key, tile); } diff --git a/src/as/com/threerings/miso/client/MisoScenePanel.as b/src/as/com/threerings/miso/client/MisoScenePanel.as index 1c82f4ea..1b2b5981 100644 --- a/src/as/com/threerings/miso/client/MisoScenePanel.as +++ b/src/as/com/threerings/miso/client/MisoScenePanel.as @@ -272,8 +272,6 @@ public class MisoScenePanel extends Sprite _objScene.layoutRenderer = new ClassFactory(PrioritizedSceneLayoutRenderer); refreshBaseBlockScenes(); - - _isoView.addScene(_objScene); } /** diff --git a/src/as/com/threerings/miso/client/SceneBlock.as b/src/as/com/threerings/miso/client/SceneBlock.as index 22a8257e..200425a4 100644 --- a/src/as/com/threerings/miso/client/SceneBlock.as +++ b/src/as/com/threerings/miso/client/SceneBlock.as @@ -73,6 +73,7 @@ public class SceneBlock var y :int = getBlockY(_key); _baseScene = new IsoScene(); + _baseScene.layoutEnabled = false; for (var ii :int = x; ii < x + BLOCK_SIZE; ii++) { for (var jj :int = y; jj < y + BLOCK_SIZE; jj++) { var tileId :int = model.getBaseTileId(ii, jj);