src/pbs.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/pbs.cpp b/src/pbs.cpp index 76cb3b9..6a8ecbb 100644 --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -376,11 +376,6 @@ bool IsSafeWaitingPosition(const Train *v, TileIndex tile, Trackdir trackdir, bo { if (IsRailDepotTile(tile)) return true; - if (IsTileType(tile, MP_RAILWAY)) { - /* For non-pbs signals, stop on the signal tile. */ - if (HasSignalOnTrackdir(tile, trackdir) && !IsPbsSignal(GetSignalType(tile, TrackdirToTrack(trackdir)))) return true; - } - /* Check next tile. For performance reasons, we check for 90 degree turns ourself. */ CFollowTrackRail ft(v, GetRailTypeInfo(v->railtype)->compatible_railtypes); @@ -397,12 +392,16 @@ bool IsSafeWaitingPosition(const Train *v, TileIndex tile, Trackdir trackdir, bo if (ft.m_new_td_bits != TRACKDIR_BIT_NONE && KillFirstBit(ft.m_new_td_bits) == TRACKDIR_BIT_NONE) { Trackdir td = FindFirstTrackdir(ft.m_new_td_bits); - /* PBS signal on next trackdir? Safe position. */ - if (HasPbsSignalOnTrackdir(ft.m_new_tile, td)) return true; - /* One-way PBS signal against us? Safe if end-of-line is allowed. */ - if (IsTileType(ft.m_new_tile, MP_RAILWAY) && HasSignalOnTrackdir(ft.m_new_tile, ReverseTrackdir(td)) && - GetSignalType(ft.m_new_tile, TrackdirToTrack(td)) == SIGTYPE_PBS_ONEWAY) { - return include_line_end; + + if (IsTileType(ft.m_new_tile, MP_RAILWAY)) { + /* Signal on next trackdir? Safe position. */ + if (HasSignalOnTrackdir(ft.m_new_tile, trackdir)) return true; + + /* One-way PBS signal against us? Safe if end-of-line is allowed. */ + Trackdir rev_td = ReverseTrackdir(td); + if (HasSignalOnTrackdir(ft.m_new_tile, rev_td) && + GetSignalType(ft.m_new_tile, TrackdirToTrack(rev_td)) == SIGTYPE_PBS_ONEWAY) + return include_line_end; } }