mirror of https://github.com/OpenTTD/OpenTTD.git
(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
This commit is contained in:
parent
639e22b83b
commit
ade19e5242
|
@ -103,6 +103,7 @@ public:
|
||||||
FORCEINLINE bool PfCalcCost(Node& n, const TrackFollower *tf)
|
FORCEINLINE bool PfCalcCost(Node& n, const TrackFollower *tf)
|
||||||
{
|
{
|
||||||
int segment_cost = 0;
|
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 */
|
/* 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;
|
TileIndex tile = n.m_key.m_tile;
|
||||||
Trackdir trackdir = n.m_key.m_td;
|
Trackdir trackdir = n.m_key.m_td;
|
||||||
|
@ -134,6 +135,7 @@ public:
|
||||||
|
|
||||||
/* if we skipped some tunnel tiles, add their cost */
|
/* if we skipped some tunnel tiles, add their cost */
|
||||||
segment_cost += F.m_tiles_skipped * YAPF_TILE_LENGTH;
|
segment_cost += F.m_tiles_skipped * YAPF_TILE_LENGTH;
|
||||||
|
tiles += F.m_tiles_skipped + 1;
|
||||||
|
|
||||||
/* add hilly terrain penalty */
|
/* add hilly terrain penalty */
|
||||||
segment_cost += Yapf().SlopeCost(tile, F.m_new_tile, trackdir);
|
segment_cost += Yapf().SlopeCost(tile, F.m_new_tile, trackdir);
|
||||||
|
@ -148,6 +150,7 @@ public:
|
||||||
/* move to the next tile */
|
/* move to the next tile */
|
||||||
tile = F.m_new_tile;
|
tile = F.m_new_tile;
|
||||||
trackdir = new_td;
|
trackdir = new_td;
|
||||||
|
if (tiles > MAX_MAP_SIZE) break;;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* save end of segment back to the node */
|
/* save end of segment back to the node */
|
||||||
|
|
Loading…
Reference in New Issue