aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2009-10-20 14:43:44 +0000
committerFilippos Karapetis2009-10-20 14:43:44 +0000
commit55dd109653c56c2847a06f9acb2fc3bf3834f730 (patch)
tree2e66a67b51be7223d3a77713956e2d43d66f5e55
parent8870b5dbbfbe7763a3dedc70fda9733ab467ad11 (diff)
downloadscummvm-rg350-55dd109653c56c2847a06f9acb2fc3bf3834f730.tar.gz
scummvm-rg350-55dd109653c56c2847a06f9acb2fc3bf3834f730.tar.bz2
scummvm-rg350-55dd109653c56c2847a06f9acb2fc3bf3834f730.zip
Changed kAvoidPath() to always avoid screen edges, after talking with waltervn. Also, formatted the comments of the dijkstra() function
svn-id: r45272
-rw-r--r--engines/sci/engine/kpathing.cpp25
1 files changed, 10 insertions, 15 deletions
diff --git a/engines/sci/engine/kpathing.cpp b/engines/sci/engine/kpathing.cpp
index a72064dbf0..b2d396c08a 100644
--- a/engines/sci/engine/kpathing.cpp
+++ b/engines/sci/engine/kpathing.cpp
@@ -1496,12 +1496,15 @@ static int intersecting_polygons(PathfindingState *s) {
return 0;
}
+/**
+ * Computes a shortest path from vertex_start to vertex_end. The caller can
+ * construct the resulting path by following the path_prev links from
+ * vertex_end back to vertex_start. If no path exists vertex_end->path_prev
+ * will be NULL
+ * Parameters: (PathfindingState *) s: The pathfinding state
+ * (bool) avoidScreenEdge: Avoid screen edges (default behavior)
+ */
static void dijkstra(PathfindingState *s, bool avoidScreenEdge) {
- // Computes a shortest path from vertex_start to vertex_end. The caller can
- // construct the resulting path by following the path_prev links from
- // vertex_end back to vertex_start. If no path exists vertex_end->path_prev
- // will be NULL
- // Parameters: (PathfindingState *) s: The pathfinding state
Polygon *polygon;
// Vertices of which the shortest path is known
@@ -1712,16 +1715,8 @@ reg_t kAvoidPath(EngineState *s, int argc, reg_t *argv) {
return output;
}
- // Early pathfinding-enabled games exclude edges on screen borders.
- // FIXME: Enable this selectively for those games that need it.
- bool avoidScreenEdge = false;
-
- // This is certainly needed for LSL5 room 640, otherwise Patti walks off-screen
- // and reenters through the wall
- if (s->_gameName == "lsl5" && s->currentRoomNumber() == 640)
- avoidScreenEdge = true;
-
- dijkstra(p, avoidScreenEdge);
+ // Apply Dijkstra, avoiding screen edges
+ dijkstra(p, true);
output = output_path(p, s);
delete p;