changeset 16916:dbbfd7203f21 draft

(svn r21651) -Fix [FS#4338] (r21229): infinite loop in the road pathfinder due to bouncing around in an "one way" trap; two one ways pointing towards eachother making it impossible to leave
author rubidium <rubidium@openttd.org>
date Mon, 27 Dec 2010 22:32:47 +0000
parents 5cf0b2194d5c
children 7b207547041b
files src/pathfinder/yapf/yapf_road.cpp
diffstat 1 files changed, 3 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/pathfinder/yapf/yapf_road.cpp
+++ b/src/pathfinder/yapf/yapf_road.cpp
@@ -103,6 +103,7 @@
 	FORCEINLINE bool PfCalcCost(Node& n, const TrackFollower *tf)
 	{
 		int segment_cost = 0;
+		uint tiles = 0;
 		/* start at n.m_key.m_tile / n.m_key.m_td and walk to the end of segment */
 		TileIndex tile = n.m_key.m_tile;
 		Trackdir trackdir = n.m_key.m_td;
@@ -134,6 +135,7 @@
 
 			/* if we skipped some tunnel tiles, add their cost */
 			segment_cost += F.m_tiles_skipped * YAPF_TILE_LENGTH;
+			tiles += F.m_tiles_skipped + 1;
 
 			/* add hilly terrain penalty */
 			segment_cost += Yapf().SlopeCost(tile, F.m_new_tile, trackdir);
@@ -148,6 +150,7 @@
 			/* move to the next tile */
 			tile = F.m_new_tile;
 			trackdir = new_td;
+			if (tiles > MAX_MAP_SIZE) break;;
 		};
 
 		/* save end of segment back to the node */