Added support for rendering object footprints when rendering objects

(useful in the editor to see what's traversable and what's not).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@948 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2002-02-06 23:14:56 +00:00
parent 670f3a71c3
commit 554d11c62b
2 changed files with 41 additions and 17 deletions
@@ -1,8 +1,9 @@
//
// $Id: DirtyItemList.java,v 1.9 2002/01/31 01:04:54 mdb Exp $
// $Id: DirtyItemList.java,v 1.10 2002/02/06 23:14:56 mdb Exp $
package com.threerings.miso.scene;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
@@ -32,7 +33,7 @@ public class DirtyItemList
public void appendDirtySprite (
MisoCharacterSprite sprite, int x, int y, Rectangle dirtyRect)
{
_items.add(new DirtyItem(sprite, null, x, y, dirtyRect));
_items.add(new DirtyItem(sprite, null, null, x, y, dirtyRect));
}
/**
@@ -40,9 +41,10 @@ public class DirtyItemList
* dirty item list.
*/
public void appendDirtyObject (
ObjectTile tile, Shape bounds, int x, int y, Rectangle dirtyRect)
ObjectTile tile, Shape bounds, Shape footprint,
int x, int y, Rectangle dirtyRect)
{
_items.add(new DirtyItem(tile, bounds, x, y, dirtyRect));
_items.add(new DirtyItem(tile, bounds, footprint, x, y, dirtyRect));
}
/**
@@ -160,6 +162,10 @@ public class DirtyItemList
/** The bounds of the dirty item if it's an object tile. */
public Shape bounds;
/** The footprint of the dirty item if it's an object tile and
* we're drawing footprints. */
public Shape footprint;
/** The origin tile coordinates. */
public int ox, oy;
@@ -175,11 +181,12 @@ public class DirtyItemList
/**
* Constructs a dirty item.
*/
public DirtyItem (
Object obj, Shape bounds, int x, int y, Rectangle dirtyRect)
public DirtyItem (Object obj, Shape bounds, Shape footprint,
int x, int y, Rectangle dirtyRect)
{
this.obj = obj;
this.bounds = bounds;
this.footprint = footprint;
this.ox = x;
this.oy = y;
this.dirtyRect = dirtyRect;
@@ -208,6 +215,12 @@ public class DirtyItemList
// clip the draw region to the dirty portion of the item
gfx.clip(clip);
// if there's a footprint, paint that
if (footprint != null) {
gfx.setColor(Color.black);
gfx.draw(footprint);
}
// paint the item
if (obj instanceof Sprite) {
((Sprite)obj).paint(gfx);
@@ -1,5 +1,5 @@
//
// $Id: IsoSceneView.java,v 1.90 2002/02/06 17:13:06 mdb Exp $
// $Id: IsoSceneView.java,v 1.91 2002/02/06 23:14:56 mdb Exp $
package com.threerings.miso.scene;
@@ -648,16 +648,24 @@ public class IsoSceneView implements SceneView
// get the object's coordinates and bounding polygon
int coord = ((Integer)iter.next()).intValue();
Polygon poly = (Polygon)_objpolys.get(coord);
if (poly.intersects(r)) {
// get the dirty portion of the object
Rectangle drect = poly.getBounds().intersection(r);
int tx = coord >> 16, ty = coord & 0x0000FFFF;
_dirtyItems.appendDirtyObject(
tiles.getTile(tx, ty), poly, tx, ty, drect);
// Log.info("Dirtied item: Object(" + tx + ", " +
// ty + ")");
if (!poly.intersects(r)) {
continue;
}
// get the dirty portion of the object
Rectangle drect = poly.getBounds().intersection(r);
int tx = coord >> 16, ty = coord & 0x0000FFFF;
ObjectTile tile = tiles.getTile(tx, ty);
// compute the footprint if we're rendering those
Polygon foot = null;
if (_renderObjectFootprints) {
foot = IsoUtil.getObjectFootprint(
_model, _polys[tx][ty], tile);
}
_dirtyItems.appendDirtyObject(tile, poly, foot, tx, ty, drect);
// Log.info("Dirtied item: Object(" + tx + ", " + ty + ")");
}
}
}
@@ -791,7 +799,7 @@ public class IsoSceneView implements SceneView
}
// we've passed the test, add the object to the list
list.appendDirtyObject(tile, poly, tx, ty, pbounds);
list.appendDirtyObject(tile, poly, null, tx, ty, pbounds);
}
}
@@ -901,6 +909,9 @@ public class IsoSceneView implements SceneView
/** The object that the mouse is currently hovering over. */
protected Object _hobject;
/** If true, object footprints are rendered when rendering objects. */
protected boolean _renderObjectFootprints;
/** The stroke object used to draw highlighted tiles and coordinates. */
protected BasicStroke _hstroke = new BasicStroke(2);
}