diff --git a/src/java/com/threerings/miso/client/util/AStarPathUtil.java b/src/java/com/threerings/miso/client/util/AStarPathUtil.java
index 861a53793..a3d1dc667 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.10 2001/11/29 23:35:59 mdb Exp $
+// $Id: AStarPathUtil.java,v 1.11 2002/02/07 19:57:24 mdb Exp $
package com.threerings.miso.scene.util;
@@ -75,14 +75,14 @@ public class AStarPathUtil
// are impassable.
// consider each successor of the node
- considerStep(info, n, n.x - 1, n.y - 1);
- considerStep(info, n, n.x, n.y - 1);
- considerStep(info, n, n.x + 1, n.y - 1);
- considerStep(info, n, n.x - 1, n.y);
- considerStep(info, n, n.x + 1, n.y);
- considerStep(info, n, n.x - 1, n.y + 1);
- considerStep(info, n, n.x, n.y + 1);
- considerStep(info, n, n.x + 1, n.y + 1);
+ considerStep(info, n, n.x - 1, n.y - 1, 14);
+ considerStep(info, n, n.x, n.y - 1, 10);
+ considerStep(info, n, n.x + 1, n.y - 1, 14);
+ considerStep(info, n, n.x - 1, n.y, 10);
+ considerStep(info, n, n.x + 1, n.y, 10);
+ considerStep(info, n, n.x - 1, n.y + 1, 14);
+ considerStep(info, n, n.x, n.y + 1, 10);
+ considerStep(info, n, n.x + 1, n.y + 1, 14);
// push the node on the closed list
info.closed.add(n);
@@ -102,16 +102,15 @@ public class AStarPathUtil
* @param y the y-coordinate for the destination step.
*/
protected static void considerStep (
- AStarInfo info, AStarNode n, int x, int y)
+ AStarInfo info, AStarNode n, int x, int y, int cost)
{
// skip node if it's outside the map bounds or otherwise impassable
if (!isStepValid(info, n.x, n.y, x, y)) {
return;
}
- // calculate the new cost for this node. the cost to go
- // node-to-node is always 1 for now.
- int newg = n.g + 1;
+ // calculate the new cost for this node
+ int newg = n.g + cost;
// retrieve the node corresponding to this location
AStarNode np = getNode(info, x, y);
@@ -238,12 +237,16 @@ public class AStarPathUtil
}
/**
- * Return a heuristic estimate of the cost to get from
- * (ax, ay) to (bx, by).
+ * Return a heuristic estimate of the cost to get from (ax,
+ * ay) to (bx, by).
*/
protected static int getDistanceEstimate (int ax, int ay, int bx, int by)
{
- return Math.max(Math.abs(bx - ax), Math.abs(by - ay));
+ // we're doing all of our cost calculations based on geometric
+ // distance times ten
+ int xsq = 10 * (bx - ax); xsq = xsq * xsq;
+ int ysq = 10 * (by - ay); ysq = ysq * ysq;
+ return (int)Math.sqrt(xsq + ysq);
}
}
@@ -330,12 +333,12 @@ class AStarNode implements Comparable
{
int bf = ((AStarNode)o).f;
- // since the set contract is fulfilled using the equality
- // results returned here, and we'd like to allow multiple
- // nodes with equivalent scores in our set, we explicitly
- // define object equivalence as the result of object.equals(),
- // else we use the unique node id since it will return a
- // consistent ordering for the objects.
+ // since the set contract is fulfilled using the equality results
+ // returned here, and we'd like to allow multiple nodes with
+ // equivalent scores in our set, we explicitly define object
+ // equivalence as the result of object.equals(), else we use the
+ // unique node id since it will return a consistent ordering for
+ // the objects.
if (f == bf) {
return (this == o) ? 0 : (id - ((AStarNode)o).id);
}