diff options
author | Max Horn | 2009-02-24 05:07:15 +0000 |
---|---|---|
committer | Max Horn | 2009-02-24 05:07:15 +0000 |
commit | 8c9bd00b510cf6f4b014927223690ea5001d151d (patch) | |
tree | 32f8c261f29c51664edf02b33d2a8541f80d5fb6 /engines/sci/engine | |
parent | 735701983cb1172c54640b79068140c164a5dda7 (diff) | |
download | scummvm-rg350-8c9bd00b510cf6f4b014927223690ea5001d151d.tar.gz scummvm-rg350-8c9bd00b510cf6f4b014927223690ea5001d151d.tar.bz2 scummvm-rg350-8c9bd00b510cf6f4b014927223690ea5001d151d.zip |
SCI: Replaced vertex list used for dijkstra algo by Common::List; got rid of include/list.h
svn-id: r38829
Diffstat (limited to 'engines/sci/engine')
-rw-r--r-- | engines/sci/engine/kpathing.cpp | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/engines/sci/engine/kpathing.cpp b/engines/sci/engine/kpathing.cpp index 510d831686..45bd19a32d 100644 --- a/engines/sci/engine/kpathing.cpp +++ b/engines/sci/engine/kpathing.cpp @@ -29,7 +29,6 @@ #include "sci/include/engine.h" #include "sci/engine/aatree.h" -#include "sci/include/list.h" #include "sci/gfx/gfx_widgets.h" #include "common/list.h" @@ -111,9 +110,6 @@ struct Vertex { Vertex *cle_prev; // previous element } entries; - // Dijkstra list entry - LIST_ENTRY(Vertex) dijkstra; // TODO: Convert this - // Distance from starting vertex float dist; @@ -1379,13 +1375,12 @@ static void dijkstra(PathfindingState *s) { // Parameters: (PathfindingState *) s: The pathfinding state // Returns : (void) Polygon *polygon; + // Vertices of which the shortest path is known - LIST_HEAD(done_head, Vertex) done; - // The remaining vertices - LIST_HEAD(remain_head, Vertex) remain; + VertexList done; - LIST_INIT(remain); - LIST_INIT(done); + // The remaining vertices + VertexList remain; // Start out with all vertices in set remain for (PolygonList::iterator it = s->polygons.begin(); it != s->polygons.end(); ++it) { @@ -1393,7 +1388,7 @@ static void dijkstra(PathfindingState *s) { Vertex *vertex; CLIST_FOREACH(vertex, &polygon->vertices, entries) { - LIST_INSERT_HEAD(&remain, vertex, dijkstra); + remain.push_front(vertex); } } @@ -1401,14 +1396,16 @@ static void dijkstra(PathfindingState *s) { // Loop until we find vertex_end while (1) { - int i; - Vertex *vertex, *vertex_min = 0; - float min = HUGE_DISTANCE; - // Find vertex at shortest distance from set done - LIST_FOREACH(vertex, &remain, dijkstra) { + VertexList::iterator it; + VertexList::iterator vertex_min_it = remain.end(); + Vertex *vertex_min = 0; + float min = HUGE_DISTANCE; + for (it = remain.begin(); it != remain.end(); ++it) { + Vertex *vertex = *it; if (vertex->dist < min) { - vertex_min = vertex; + vertex_min_it = it; + vertex_min = *vertex_min_it; min = vertex->dist; } } @@ -1423,10 +1420,10 @@ static void dijkstra(PathfindingState *s) { return; // Move vertex from set remain to set done - LIST_REMOVE(vertex_min, dijkstra); - LIST_INSERT_HEAD(&done, vertex_min, dijkstra); + done.push_front(vertex_min); + remain.erase(vertex_min_it); - for (i = 0; i < s->vertices; i++) { + for (int i = 0; i < s->vertices; i++) { // Adjust upper bound for all vertices that are visible from vertex_min if (IS_VISIBLE(s, vertex_min->idx, i)) { float new_dist; |