diff --git a/src/java/com/threerings/miso/client/DisplayMisoScene.java b/src/java/com/threerings/miso/client/DisplayMisoScene.java
index d2318a310..191bd4282 100644
--- a/src/java/com/threerings/miso/client/DisplayMisoScene.java
+++ b/src/java/com/threerings/miso/client/DisplayMisoScene.java
@@ -1,11 +1,11 @@
//
-// $Id: DisplayMisoScene.java,v 1.3 2002/01/30 18:28:32 mdb Exp $
+// $Id: DisplayMisoScene.java,v 1.4 2002/02/17 08:01:15 mdb Exp $
package com.threerings.miso.scene;
-import com.threerings.media.tile.ObjectTileLayer;
-import com.threerings.media.tile.TileLayer;
-import com.threerings.miso.tile.BaseTileLayer;
+import com.threerings.media.tile.ObjectTile;
+import com.threerings.media.tile.Tile;
+import com.threerings.miso.tile.BaseTile;
/**
* Makes available the information from the {@link MisoSceneModel} in a
@@ -16,22 +16,19 @@ import com.threerings.miso.tile.BaseTileLayer;
public interface DisplayMisoScene
{
/**
- * Returns the tiles that comprise the base layer of this scene. This
- * layer is read-only and not to be modified.
+ * Returns the base tile at the specified coordinates.
*/
- public BaseTileLayer getBaseLayer ();
+ public BaseTile getBaseTile (int x, int y);
/**
- * Returns the tiles that comprise the fringe layer of this scene.
- * This layer is read-only and not to be modified.
+ * Returns the fring tile at the specified coordinates.
*/
- public TileLayer getFringeLayer ();
+ public Tile getFringeTile (int x, int y);
/**
- * Returns the tiles that comprise the object layer of this scene.
- * This layer is read-only and not to be modified.
+ * Returns the object tile at the specified coordinates.
*/
- public ObjectTileLayer getObjectLayer ();
+ public ObjectTile getObjectTile (int x, int y);
/**
* Returns the action associated with the object tile at the specified
diff --git a/src/java/com/threerings/miso/client/DisplayMisoSceneImpl.java b/src/java/com/threerings/miso/client/DisplayMisoSceneImpl.java
index ed1daade0..199a90cdb 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.50 2002/02/06 17:13:06 mdb Exp $
+// $Id: DisplayMisoSceneImpl.java,v 1.51 2002/02/17 08:01:15 mdb Exp $
package com.threerings.miso.scene;
@@ -172,21 +172,21 @@ public class DisplayMisoSceneImpl
}
// documentation inherited
- public BaseTileLayer getBaseLayer ()
+ public BaseTile getBaseTile (int x, int y)
{
- return _base;
+ return _base.getTile(x, y);
}
// documentation inherited
- public TileLayer getFringeLayer ()
+ public Tile getFringeTile (int x, int y)
{
- return _fringe;
+ return _fringe.getTile(x, y);
}
// documentation inherited
- public ObjectTileLayer getObjectLayer ()
+ public ObjectTile getObjectTile (int x, int y)
{
- return _object;
+ return _object.getTile(x, y);
}
// documentation inherited from interface
diff --git a/src/java/com/threerings/miso/client/IsoSceneView.java b/src/java/com/threerings/miso/client/IsoSceneView.java
index 211b273d7..3e604c3d8 100644
--- a/src/java/com/threerings/miso/client/IsoSceneView.java
+++ b/src/java/com/threerings/miso/client/IsoSceneView.java
@@ -1,5 +1,5 @@
//
-// $Id: IsoSceneView.java,v 1.94 2002/02/17 07:30:45 mdb Exp $
+// $Id: IsoSceneView.java,v 1.95 2002/02/17 08:01:15 mdb Exp $
package com.threerings.miso.scene;
@@ -27,15 +27,12 @@ import com.threerings.media.sprite.Path;
import com.threerings.media.sprite.SpriteManager;
import com.threerings.media.tile.ObjectTile;
-import com.threerings.media.tile.ObjectTileLayer;
import com.threerings.media.tile.Tile;
-import com.threerings.media.tile.TileLayer;
import com.threerings.miso.Log;
import com.threerings.miso.scene.DirtyItemList.DirtyItem;
import com.threerings.miso.scene.util.AStarPathUtil;
import com.threerings.miso.scene.util.IsoUtil;
-import com.threerings.miso.tile.BaseTileLayer;
/**
* The iso scene view provides an isometric view of a particular
@@ -301,22 +298,19 @@ public class IsoSceneView implements SceneView
*/
protected void renderTiles (Graphics2D gfx)
{
- BaseTileLayer base = _scene.getBaseLayer();
- TileLayer fringe = _scene.getFringeLayer();
-
// render the base and fringe layers
- for (int yy = 0; yy < base.getHeight(); yy++) {
- for (int xx = 0; xx < base.getWidth(); xx++) {
+ for (int yy = 0; yy < _model.scenehei; yy++) {
+ for (int xx = 0; xx < _model.scenewid; xx++) {
if (!_dirty[xx][yy]) {
continue;
}
// draw the base and fringe tile images
Tile tile;
- if ((tile = base.getTile(xx, yy)) != null) {
+ if ((tile = _scene.getBaseTile(xx, yy)) != null) {
tile.paint(gfx, getTilePoly(xx, yy));
}
- if ((tile = fringe.getTile(xx, yy)) != null) {
+ if ((tile = _scene.getFringeTile(xx, yy)) != null) {
tile.paint(gfx, getTilePoly(xx, yy));
}
@@ -367,24 +361,45 @@ public class IsoSceneView implements SceneView
_objects.clear();
// generate metric records for all objects
- ObjectTileLayer tiles = _scene.getObjectLayer();
- for (int yy = 0; yy < tiles.getHeight(); yy++) {
- for (int xx = 0; xx < tiles.getWidth(); xx++) {
- ObjectTile tile = tiles.getTile(xx, yy);
- if (tile == null) {
- continue;
+ for (int yy = 0; yy < _model.scenehei; yy++) {
+ for (int xx = 0; xx < _model.scenewid; xx++) {
+ ObjectTile tile = _scene.getObjectTile(xx, yy);
+ if (tile != null) {
+ generateObjectMetrics(tile, xx, yy);
}
+ }
+ }
+ }
- // create a metrics record for this object
- ObjectMetrics metrics = new ObjectMetrics();
- metrics.tile = tile;
- metrics.x = xx;
- metrics.y = yy;
- metrics.bounds = IsoUtil.getObjectBounds(
- _model, getTilePoly(xx, yy), tile);
+ /**
+ * Generates object tile metrics for the supplied object tile and adds
+ * them to the list.
+ */
+ protected void generateObjectMetrics (ObjectTile tile, int x, int y)
+ {
+ // create a metrics record for this object
+ ObjectMetrics metrics = new ObjectMetrics();
+ metrics.tile = tile;
+ metrics.x = x;
+ metrics.y = y;
+ metrics.bounds = IsoUtil.getObjectBounds(
+ _model, getTilePoly(x, y), tile);
- // and add it to the list
- _objects.add(metrics);
+ // and add it to the list
+ _objects.add(metrics);
+ }
+
+ /**
+ * Clears out the object metrics for the object at the specified tile
+ * coordinates.
+ */
+ protected void clearObjectMetrics (int x, int y)
+ {
+ for (int i = 0; i < _objects.size(); i++) {
+ ObjectMetrics metrics = (ObjectMetrics)_objects.get(i);
+ if (metrics.x == x && metrics.y == y) {
+ _objects.remove(i);
+ return;
}
}
}
@@ -661,7 +676,7 @@ public class IsoSceneView implements SceneView
// get a reasonable tile path through the scene
List points = AStarPathUtil.getPath(
- _scene.getBaseLayer(), _model.scenewid, _model.scenehei,
+ _scene, _model.scenewid, _model.scenehei,
sprite, sprite.getTileX(), sprite.getTileY(), dest.x, dest.y);
// construct a path object to guide the sprite on its merry way
diff --git a/src/java/com/threerings/miso/client/util/AStarPathUtil.java b/src/java/com/threerings/miso/client/util/AStarPathUtil.java
index b4a18d7da..492605d1c 100644
--- a/src/java/com/threerings/miso/client/util/AStarPathUtil.java
+++ b/src/java/com/threerings/miso/client/util/AStarPathUtil.java
@@ -1,5 +1,5 @@
//
-// $Id: AStarPathUtil.java,v 1.12 2002/02/07 20:02:53 mdb Exp $
+// $Id: AStarPathUtil.java,v 1.13 2002/02/17 08:01:15 mdb Exp $
package com.threerings.miso.scene.util;
@@ -9,9 +9,9 @@ import java.util.*;
import com.threerings.media.util.MathUtil;
import com.threerings.miso.Log;
+import com.threerings.miso.scene.DisplayMisoScene;
import com.threerings.miso.scene.Traverser;
import com.threerings.miso.tile.BaseTile;
-import com.threerings.miso.tile.BaseTileLayer;
/**
* The AStarPathUtil class provides a facility for
@@ -26,15 +26,14 @@ public class AStarPathUtil
{
/**
* Return a list of Point objects representing a path
- * from coordinates (ax, by) to
- * (bx, by), inclusive, determined by performing an
- * A* search in the given array of tiles. Assumes the starting
- * and destination nodes are traversable by the specified
- * traverser.
+ * from coordinates (ax, by) to (bx, by),
+ * inclusive, determined by performing an A* search in the given
+ * scene's base tile layer. Assumes the starting and destination nodes
+ * are traversable by the specified traverser.
*
- * @param tiles the tile array.
- * @param tilewid the tile array width.
- * @param tilehei the tile array height.
+ * @param scene the scene in which a path is to be computed.
+ * @param tilewid the scene width in tiles.
+ * @param tilehei the scene height in tiles.
* @param trav the traverser to follow the path.
* @param ax the starting x-position in tile coordinates.
* @param ay the starting y-position in tile coordinates.
@@ -44,10 +43,10 @@ public class AStarPathUtil
* @return the list of points in the path.
*/
public static List getPath (
- BaseTileLayer tiles, int tilewid, int tilehei, Traverser trav,
+ DisplayMisoScene scene, int tilewid, int tilehei, Traverser trav,
int ax, int ay, int bx, int by)
{
- AStarInfo info = new AStarInfo(tiles, tilewid, tilehei, trav, bx, by);
+ AStarInfo info = new AStarInfo(scene, tilewid, tilehei, trav, bx, by);
// set up the starting node
AStarNode s = getNode(info, ax, ay);
@@ -199,7 +198,7 @@ public class AStarPathUtil
protected static boolean isTraversable (AStarInfo info, int x, int y)
{
return (isCoordinateValid(info, x, y) &&
- info.trav.canTraverse(info.tiles.getTile(x, y)));
+ info.trav.canTraverse(info.scene.getBaseTile(x, y)));
}
/**
@@ -253,8 +252,8 @@ public class AStarPathUtil
*/
class AStarInfo
{
- /** The tile layer being traversed. */
- public BaseTileLayer tiles;
+ /** The scene whose base tile layer is being traversed. */
+ public DisplayMisoScene scene;
/** The tile array dimensions. */
public int tilewid, tilehei;
@@ -275,11 +274,11 @@ class AStarInfo
public int destx, desty;
public AStarInfo (
- BaseTileLayer tiles, int tilewid, int tilehei, Traverser trav,
+ DisplayMisoScene scene, int tilewid, int tilehei, Traverser trav,
int destx, int desty)
{
// save off references
- this.tiles = tiles;
+ this.scene = scene;
this.tilewid = tilewid;
this.tilehei = tilehei;
this.trav = trav;