1
0
Fork 0

(svn r10199) -Fix [FS#884, YAPF]: 'target_seen' flag that is set prematurely in some cases (1 tile long cached segment followed by target station) stops on assert (immeR)

release/0.6
KUDr 2007-06-18 14:40:07 +00:00
parent 0c369c21e0
commit fad2a36b8f
1 changed files with 4 additions and 2 deletions

View File

@ -195,6 +195,7 @@ public:
RailType rail_type = GetTileRailType(tile); RailType rail_type = GetTileRailType(tile);
bool target_seen = Yapf().PfDetectDestination(tile, trackdir); bool target_seen = Yapf().PfDetectDestination(tile, trackdir);
bool end_by_target_seen = false;
if (tf.m_is_station) { if (tf.m_is_station) {
// station tiles have an extra penalty // station tiles have an extra penalty
@ -212,6 +213,7 @@ public:
// finish if we have reached the destination // finish if we have reached the destination
if (target_seen) { if (target_seen) {
end_by_target_seen = true;
break; break;
} }
@ -342,7 +344,7 @@ public:
} }
// special costs for the case we have reached our target // special costs for the case we have reached our target
if (target_seen) { if (end_by_target_seen) {
n.flags_u.flags_s.m_targed_seen = true; n.flags_u.flags_s.m_targed_seen = true;
if (n.flags_u.flags_s.m_last_signal_was_red) { if (n.flags_u.flags_s.m_last_signal_was_red) {
if (n.m_last_red_signal_type == SIGTYPE_EXIT) { if (n.m_last_red_signal_type == SIGTYPE_EXIT) {
@ -358,7 +360,7 @@ public:
// total node cost // total node cost
n.m_cost = parent_cost + first_tile_cost + segment_cost + extra_cost; n.m_cost = parent_cost + first_tile_cost + segment_cost + extra_cost;
return !n.m_segment->flags_u.flags_s.m_end_of_line; return !n.m_segment->flags_u.flags_s.m_end_of_line || end_by_target_seen;
} }
FORCEINLINE bool CanUseGlobalCache(Node& n) const FORCEINLINE bool CanUseGlobalCache(Node& n) const