Fixed up image loading to use the now-non-static ImageManager class.
Modified TileManager to store the height of a tile in the Tile object's member data when the tile is initially created since we would like to be able to reference it speedily. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@63 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,12 +1,14 @@
|
|||||||
//
|
//
|
||||||
// $Id: ImageManager.java,v 1.1 2001/07/18 21:45:42 shaper Exp $
|
// $Id: ImageManager.java,v 1.2 2001/07/18 22:45:34 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.media;
|
package com.threerings.media;
|
||||||
|
|
||||||
import com.threerings.cocktail.miso.Log;
|
import com.threerings.miso.Log;
|
||||||
|
import com.threerings.resource.ResourceManager;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.image.*;
|
import java.awt.image.*;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -20,14 +22,16 @@ import java.util.Hashtable;
|
|||||||
*/
|
*/
|
||||||
public class ImageManager
|
public class ImageManager
|
||||||
{
|
{
|
||||||
public static Toolkit tk = Toolkit.getDefaultToolkit();
|
public Toolkit tk = Toolkit.getDefaultToolkit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the ImageManager with a root component to which
|
* Construct an ImageManager object with the ResourceManager from
|
||||||
* images will later be rendered.
|
* which it will obtain its data, and a root component to which
|
||||||
|
* images will be rendered.
|
||||||
*/
|
*/
|
||||||
public static void init (Component root)
|
public ImageManager (ResourceManager rmgr, Component root)
|
||||||
{
|
{
|
||||||
|
_rmgr = rmgr;
|
||||||
_root = root;
|
_root = root;
|
||||||
tk = root.getToolkit();
|
tk = root.getToolkit();
|
||||||
}
|
}
|
||||||
@@ -36,19 +40,13 @@ public class ImageManager
|
|||||||
* Load the image from the specified filename and cache it for
|
* Load the image from the specified filename and cache it for
|
||||||
* faster retrieval henceforth.
|
* faster retrieval henceforth.
|
||||||
*/
|
*/
|
||||||
public static Image getImage (String fname)
|
public Image getImage (String fname)
|
||||||
{
|
{
|
||||||
if (_root == null) {
|
if (_root == null) {
|
||||||
Log.warning("Attempt to get image without valid root component.");
|
Log.warning("Attempt to get image without valid root component.");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: fix this to properly find the file within the
|
|
||||||
// classpath. getResourceAsStream() returns an InputStream,
|
|
||||||
// but java.awt.Toolkit.createImage() can only take one of a
|
|
||||||
// byte[], String, URL, or ImageProducer.
|
|
||||||
fname = "/home/shaper/workspace/cocktail/" + fname;
|
|
||||||
|
|
||||||
Image img = (Image)_imgs.get(fname);
|
Image img = (Image)_imgs.get(fname);
|
||||||
if (img != null) {
|
if (img != null) {
|
||||||
Log.info("Retrieved image from cache [fname=" + fname + "].");
|
Log.info("Retrieved image from cache [fname=" + fname + "].");
|
||||||
@@ -57,11 +55,12 @@ public class ImageManager
|
|||||||
|
|
||||||
Log.info("Loading image into cache [fname=" + fname + "].");
|
Log.info("Loading image into cache [fname=" + fname + "].");
|
||||||
|
|
||||||
img = tk.createImage(fname);
|
|
||||||
MediaTracker tracker = new MediaTracker(_root);
|
|
||||||
tracker.addImage(img, 0);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
byte[] data = _rmgr.getResourceAsBytes(fname);
|
||||||
|
img = tk.createImage(data);
|
||||||
|
MediaTracker tracker = new MediaTracker(_root);
|
||||||
|
tracker.addImage(img, 0);
|
||||||
|
|
||||||
tracker.waitForID(0);
|
tracker.waitForID(0);
|
||||||
if (tracker.isErrorAny()) {
|
if (tracker.isErrorAny()) {
|
||||||
Log.warning("Error loading image [fname=" + fname + "].");
|
Log.warning("Error loading image [fname=" + fname + "].");
|
||||||
@@ -71,8 +70,11 @@ public class ImageManager
|
|||||||
_imgs.put(fname, img);
|
_imgs.put(fname, img);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (IOException ioe) {
|
||||||
e.printStackTrace();
|
Log.warning("Exception loading image [ioe=" + ioe + "].");
|
||||||
|
|
||||||
|
} catch (InterruptedException ie) {
|
||||||
|
Log.warning("Interrupted loading image [ie=" + ie + "].");
|
||||||
}
|
}
|
||||||
|
|
||||||
return img;
|
return img;
|
||||||
@@ -82,8 +84,8 @@ public class ImageManager
|
|||||||
* Creates a new image representing the specified rectangular
|
* Creates a new image representing the specified rectangular
|
||||||
* section cropped from the specified full image object.
|
* section cropped from the specified full image object.
|
||||||
*/
|
*/
|
||||||
public static BufferedImage getImageCropped (Image fullImg, int x, int y,
|
public Image getImageCropped (Image fullImg, int x, int y,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
{
|
{
|
||||||
BufferedImage img =
|
BufferedImage img =
|
||||||
new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
|
new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
|
||||||
@@ -94,6 +96,7 @@ public class ImageManager
|
|||||||
return img;
|
return img;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static Component _root;
|
protected ResourceManager _rmgr;
|
||||||
protected static Hashtable _imgs = new Hashtable();
|
protected Component _root;
|
||||||
|
protected Hashtable _imgs = new Hashtable();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
//
|
//
|
||||||
// $Id: Tile.java,v 1.4 2001/07/18 21:45:42 shaper Exp $
|
// $Id: Tile.java,v 1.5 2001/07/18 22:45:35 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.miso.tile;
|
package com.threerings.miso.tile;
|
||||||
|
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A tile represents a single square in a single layer in a scene.
|
* A tile represents a single square in a single layer in a scene.
|
||||||
*/
|
*/
|
||||||
public class Tile
|
public class Tile
|
||||||
{
|
{
|
||||||
public BufferedImage img; // the tile image
|
public Image img; // the tile image
|
||||||
public short tsid; // the tile set identifier
|
public short tsid; // the tile set identifier
|
||||||
public short tid; // the tile identifier within the set
|
public short tid; // the tile identifier within the set
|
||||||
|
public short height; // the tile height in pixels
|
||||||
|
|
||||||
// height and width of a tile image in pixels
|
// height and width of a tile image in pixels
|
||||||
public static final int HEIGHT = 16;
|
public static final int HEIGHT = 16;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: TileManager.java,v 1.6 2001/07/18 21:45:42 shaper Exp $
|
// $Id: TileManager.java,v 1.7 2001/07/18 22:45:35 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.miso.tile;
|
package com.threerings.miso.tile;
|
||||||
|
|
||||||
@@ -9,6 +9,7 @@ import com.samskivert.util.ConfigUtil;
|
|||||||
import com.samskivert.util.IntMap;
|
import com.samskivert.util.IntMap;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@@ -60,19 +61,12 @@ public class TileManager
|
|||||||
return tile;
|
return tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
// retrieve the tileset containing the tile
|
|
||||||
TileSet tset = _tsmgr.getTileSet(tsid);
|
|
||||||
if (tset == null) {
|
|
||||||
Log.warning("Can't create tile due to unknown tileset " +
|
|
||||||
"[tsid=" + tsid + ", tid=" + tid + "].");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// retrieve the tile image from the tileset
|
// retrieve the tile image from the tileset
|
||||||
tile = new Tile(tsid, tid);
|
tile = new Tile(tsid, tid);
|
||||||
if ((tile.img = tset.getTileImage(tid)) == null) {
|
if ((tile.img = _tsmgr.getTileImage(tsid, tid)) == null) {
|
||||||
Log.warning("Null tile image [tsid="+tsid+", tid="+tid+"].");
|
Log.warning("Null tile image [tsid="+tsid+", tid="+tid+"].");
|
||||||
}
|
}
|
||||||
|
tile.height = (short)((BufferedImage)tile.img).getHeight();
|
||||||
|
|
||||||
_tiles.put(utid, tile);
|
_tiles.put(utid, tile);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: TileSet.java,v 1.7 2001/07/18 21:45:42 shaper Exp $
|
// $Id: TileSet.java,v 1.8 2001/07/18 22:45:35 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.miso.tile;
|
package com.threerings.miso.tile;
|
||||||
|
|
||||||
@@ -62,11 +62,11 @@ public class TileSet
|
|||||||
* Return the image corresponding to the specified tile id within
|
* Return the image corresponding to the specified tile id within
|
||||||
* this tile set.
|
* this tile set.
|
||||||
*/
|
*/
|
||||||
public BufferedImage getTileImage (int tid)
|
public Image getTileImage (ImageManager imgr, int tid)
|
||||||
{
|
{
|
||||||
// load the full tile image if we don't already have it
|
// load the full tile image if we don't already have it
|
||||||
if (_imgTiles == null) {
|
if (_imgTiles == null) {
|
||||||
if ((_imgTiles = ImageManager.getImage(_imgFile)) == null) {
|
if ((_imgTiles = imgr.getImage(_imgFile)) == null) {
|
||||||
Log.warning("Failed to retrieve full tileset image " +
|
Log.warning("Failed to retrieve full tileset image " +
|
||||||
"[file=" + _imgFile + "].");
|
"[file=" + _imgFile + "].");
|
||||||
return null;
|
return null;
|
||||||
@@ -89,8 +89,8 @@ public class TileSet
|
|||||||
// ", ty=" + ty + "].");
|
// ", ty=" + ty + "].");
|
||||||
|
|
||||||
// crop the tile-sized image chunk from the full image
|
// crop the tile-sized image chunk from the full image
|
||||||
return ImageManager.getImageCropped(_imgTiles, tx, ty,
|
return imgr.getImageCropped(_imgTiles, tx, ty,
|
||||||
Tile.WIDTH, _rowHeight[ridx]);
|
Tile.WIDTH, _rowHeight[ridx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
//
|
//
|
||||||
// $Id: TileSetManager.java,v 1.4 2001/07/18 21:45:42 shaper Exp $
|
// $Id: TileSetManager.java,v 1.5 2001/07/18 22:45:35 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.miso.tile;
|
package com.threerings.miso.tile;
|
||||||
|
|
||||||
|
import java.awt.Image;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -14,6 +15,11 @@ public interface TileSetManager
|
|||||||
*/
|
*/
|
||||||
public TileSet getTileSet (int tsid);
|
public TileSet getTileSet (int tsid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the image corresponding to the specified tileset and tile id.
|
||||||
|
*/
|
||||||
|
public Image getTileImage (int tsid, int tid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a list of all tilesets available for use.
|
* Return a list of all tilesets available for use.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,20 +1,34 @@
|
|||||||
//
|
//
|
||||||
// $Id: TileSetManagerImpl.java,v 1.3 2001/07/18 21:45:42 shaper Exp $
|
// $Id: TileSetManagerImpl.java,v 1.4 2001/07/18 22:45:35 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.miso.tile;
|
package com.threerings.miso.tile;
|
||||||
|
|
||||||
|
import com.threerings.media.ImageManager;
|
||||||
|
|
||||||
import com.samskivert.util.IntMap;
|
import com.samskivert.util.IntMap;
|
||||||
|
|
||||||
|
import java.awt.Image;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
|
||||||
public abstract class TileSetManagerImpl implements TileSetManager
|
public abstract class TileSetManagerImpl implements TileSetManager
|
||||||
{
|
{
|
||||||
|
public TileSetManagerImpl (ImageManager imgr)
|
||||||
|
{
|
||||||
|
_imgr = imgr;
|
||||||
|
}
|
||||||
|
|
||||||
public TileSet getTileSet (int tsid)
|
public TileSet getTileSet (int tsid)
|
||||||
{
|
{
|
||||||
return (TileSet)_tilesets.get(tsid);
|
return (TileSet)_tilesets.get(tsid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Image getTileImage (int tsid, int tid)
|
||||||
|
{
|
||||||
|
TileSet tset = getTileSet(tsid);
|
||||||
|
return (tset != null) ? tset.getTileImage(_imgr, tid) : null;
|
||||||
|
}
|
||||||
|
|
||||||
public ArrayList getTileSets ()
|
public ArrayList getTileSets ()
|
||||||
{
|
{
|
||||||
int size = _tilesets.size();
|
int size = _tilesets.size();
|
||||||
@@ -35,5 +49,6 @@ public abstract class TileSetManagerImpl implements TileSetManager
|
|||||||
return _tilesets.size();
|
return _tilesets.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected ImageManager _imgr;
|
||||||
protected IntMap _tilesets = new IntMap();
|
protected IntMap _tilesets = new IntMap();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: IsoSceneView.java,v 1.6 2001/07/18 21:45:42 shaper Exp $
|
// $Id: IsoSceneView.java,v 1.7 2001/07/18 22:45:35 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.miso.scene;
|
package com.threerings.miso.scene;
|
||||||
|
|
||||||
@@ -7,7 +7,6 @@ import com.threerings.miso.Log;
|
|||||||
import com.threerings.miso.tile.Tile;
|
import com.threerings.miso.tile.Tile;
|
||||||
import com.threerings.miso.tile.TileManager;
|
import com.threerings.miso.tile.TileManager;
|
||||||
import com.threerings.miso.util.MathUtil;
|
import com.threerings.miso.util.MathUtil;
|
||||||
import com.threerings.media.ImageManager;
|
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.image.*;
|
import java.awt.image.*;
|
||||||
@@ -89,7 +88,7 @@ public class IsoSceneView implements SceneView
|
|||||||
// TODO: draw layers L1+.
|
// TODO: draw layers L1+.
|
||||||
Tile tile = _scene.tiles[tx][ty][Scene.LAYER_BASE];
|
Tile tile = _scene.tiles[tx][ty][Scene.LAYER_BASE];
|
||||||
|
|
||||||
int ypos = screenY - (tile.img.getHeight() - Tile.HEIGHT);
|
int ypos = screenY - (tile.height - Tile.HEIGHT);
|
||||||
g2.drawImage(tile.img, screenX, ypos, null);
|
g2.drawImage(tile.img, screenX, ypos, null);
|
||||||
|
|
||||||
//paintCoords(g2, tx, ty, screenX, screenY);
|
//paintCoords(g2, tx, ty, screenX, screenY);
|
||||||
|
|||||||
@@ -1,13 +1,20 @@
|
|||||||
//
|
//
|
||||||
// $Id: CompiledTileSetManager.java,v 1.4 2001/07/18 21:45:42 shaper Exp $
|
// $Id: CompiledTileSetManager.java,v 1.5 2001/07/18 22:45:35 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.miso.tile;
|
package com.threerings.miso.tile;
|
||||||
|
|
||||||
|
import com.threerings.media.ImageManager;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class CompiledTileSetManager extends TileSetManagerImpl
|
public class CompiledTileSetManager extends TileSetManagerImpl
|
||||||
{
|
{
|
||||||
|
public CompiledTileSetManager (ImageManager imgr)
|
||||||
|
{
|
||||||
|
super(imgr);
|
||||||
|
}
|
||||||
|
|
||||||
public void loadTileSets (InputStream tis) throws IOException
|
public void loadTileSets (InputStream tis) throws IOException
|
||||||
{
|
{
|
||||||
// TBD
|
// TBD
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
//
|
//
|
||||||
// $Id: EditableTileSetManager.java,v 1.4 2001/07/18 21:45:42 shaper Exp $
|
// $Id: EditableTileSetManager.java,v 1.5 2001/07/18 22:45:35 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.miso.tile;
|
package com.threerings.miso.tile;
|
||||||
|
|
||||||
import com.threerings.miso.Log;
|
import com.threerings.miso.Log;
|
||||||
|
import com.threerings.media.ImageManager;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -17,6 +18,11 @@ import java.util.ArrayList;
|
|||||||
*/
|
*/
|
||||||
public class EditableTileSetManager extends TileSetManagerImpl
|
public class EditableTileSetManager extends TileSetManagerImpl
|
||||||
{
|
{
|
||||||
|
public EditableTileSetManager (ImageManager imgr)
|
||||||
|
{
|
||||||
|
super(imgr);
|
||||||
|
}
|
||||||
|
|
||||||
public void loadTileSets (InputStream tis) throws IOException
|
public void loadTileSets (InputStream tis) throws IOException
|
||||||
{
|
{
|
||||||
// read all tileset descriptions from the XML input stream
|
// read all tileset descriptions from the XML input stream
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" standalone="yes"?>
|
<?xml version="1.0" standalone="yes"?>
|
||||||
|
|
||||||
<!-- $Id: tilesets.xml,v 1.1 2001/07/17 17:16:53 shaper Exp $ -->
|
<!-- $Id: tilesets.xml,v 1.2 2001/07/18 22:45:33 shaper Exp $ -->
|
||||||
|
|
||||||
<!-- Initial test tileset description data. -->
|
<!-- Initial test tileset description data. -->
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<tileset>
|
<tileset>
|
||||||
<name>Ground</name>
|
<name>Ground</name>
|
||||||
<tsid>1000</tsid>
|
<tsid>1000</tsid>
|
||||||
<imagefile>rsrc/media/miso/tiles-base.png</imagefile>
|
<imagefile>media/miso/tiles-base.png</imagefile>
|
||||||
<rowheight>16, 16</rowheight>
|
<rowheight>16, 16</rowheight>
|
||||||
<tilecount>10, 10</tilecount>
|
<tilecount>10, 10</tilecount>
|
||||||
</tileset>
|
</tileset>
|
||||||
@@ -17,9 +17,9 @@
|
|||||||
<tileset>
|
<tileset>
|
||||||
<name>Wall</name>
|
<name>Wall</name>
|
||||||
<tsid>1001</tsid>
|
<tsid>1001</tsid>
|
||||||
<imagefile>rsrc/media/miso/tiles-wall.png</imagefile>
|
<imagefile>media/miso/tiles-wall.png</imagefile>
|
||||||
<rowheight>45, 45</rowheight>
|
<rowheight>45, 45</rowheight>
|
||||||
<tilecount>2, 2</tilecount>
|
<tilecount>3, 3</tilecount>
|
||||||
</tileset>
|
</tileset>
|
||||||
|
|
||||||
</tilesetgroup>
|
</tilesetgroup>
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
Reference in New Issue
Block a user