Fix 90° turns being wrongly detected across bridges of non-zero length

This prevented reservations
This commit is contained in:
Jonathan G Rennison
2018-07-13 03:01:08 +01:00
parent 77362b829a
commit a7e767d766
2 changed files with 4 additions and 4 deletions

View File

@@ -412,7 +412,7 @@ bool IsSafeWaitingPosition(const Train *v, TileIndex tile, Trackdir trackdir, bo
/* Check for reachable tracks. */ /* Check for reachable tracks. */
ft.m_new_td_bits &= DiagdirReachesTrackdirs(ft.m_exitdir); ft.m_new_td_bits &= DiagdirReachesTrackdirs(ft.m_exitdir);
if (forbid_90deg) ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(trackdir); if (forbid_90deg && ft.m_tiles_skipped == 0) ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(trackdir);
if (ft.m_new_td_bits == TRACKDIR_BIT_NONE) return include_line_end; if (ft.m_new_td_bits == TRACKDIR_BIT_NONE) return include_line_end;
if (ft.m_new_td_bits != TRACKDIR_BIT_NONE && KillFirstBit(ft.m_new_td_bits) == TRACKDIR_BIT_NONE) { if (ft.m_new_td_bits != TRACKDIR_BIT_NONE && KillFirstBit(ft.m_new_td_bits) == TRACKDIR_BIT_NONE) {

View File

@@ -2120,7 +2120,7 @@ static void CheckNextTrainTile(Train *v)
if (HasPbsSignalOnTrackdir(ft.m_new_tile, FindFirstTrackdir(ft.m_new_td_bits))) { if (HasPbsSignalOnTrackdir(ft.m_new_tile, FindFirstTrackdir(ft.m_new_td_bits))) {
/* If the next tile is a PBS signal, try to make a reservation. */ /* If the next tile is a PBS signal, try to make a reservation. */
TrackBits tracks = TrackdirBitsToTrackBits(ft.m_new_td_bits); TrackBits tracks = TrackdirBitsToTrackBits(ft.m_new_td_bits);
if (_settings_game.pf.forbid_90_deg) { if (_settings_game.pf.forbid_90_deg && ft.m_tiles_skipped == 0) {
tracks &= ~TrackCrossesTracks(TrackdirToTrack(ft.m_old_td)); tracks &= ~TrackCrossesTracks(TrackdirToTrack(ft.m_old_td));
} }
ChooseTrainTrack(v, ft.m_new_tile, ft.m_exitdir, tracks, false, NULL, false); ChooseTrainTrack(v, ft.m_new_tile, ft.m_exitdir, tracks, false, NULL, false);
@@ -2364,7 +2364,7 @@ static PBSTileInfo ExtendTrainReservation(const Train *v, TrackBits *new_tracks,
if (HasOnewaySignalBlockingTrackdir(ft.m_new_tile, FindFirstTrackdir(ft.m_new_td_bits))) break; if (HasOnewaySignalBlockingTrackdir(ft.m_new_tile, FindFirstTrackdir(ft.m_new_td_bits))) break;
} }
if (_settings_game.pf.forbid_90_deg) { if (_settings_game.pf.forbid_90_deg && ft.m_tiles_skipped == 0) {
ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(ft.m_old_td); ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(ft.m_old_td);
if (ft.m_new_td_bits == TRACKDIR_BIT_NONE) break; if (ft.m_new_td_bits == TRACKDIR_BIT_NONE) break;
} }
@@ -2416,7 +2416,7 @@ static PBSTileInfo ExtendTrainReservation(const Train *v, TrackBits *new_tracks,
while (tile != stopped || cur_td != stopped_td) { while (tile != stopped || cur_td != stopped_td) {
if (!ft.Follow(tile, cur_td)) break; if (!ft.Follow(tile, cur_td)) break;
if (_settings_game.pf.forbid_90_deg) { if (_settings_game.pf.forbid_90_deg && ft.m_tiles_skipped == 0) {
ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(ft.m_old_td); ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(ft.m_old_td);
assert(ft.m_new_td_bits != TRACKDIR_BIT_NONE); assert(ft.m_new_td_bits != TRACKDIR_BIT_NONE);
} }