diff --git a/src/pathfinder/yapf/yapf_rail.cpp b/src/pathfinder/yapf/yapf_rail.cpp index f293e49972..5b334ddeec 100644 --- a/src/pathfinder/yapf/yapf_rail.cpp +++ b/src/pathfinder/yapf/yapf_rail.cpp @@ -149,7 +149,7 @@ private: tile = TILE_ADD(tile, diff); } } else if (tile != m_res_fail_tile || td != m_res_fail_td) { - UnreserveRailTrack(tile, TrackdirToTrack(td)); + UnreserveRailTrackdir(tile, td); } return (tile != m_res_dest || td != m_res_dest_td) && (tile != m_res_fail_tile || td != m_res_fail_td); } diff --git a/src/pbs.cpp b/src/pbs.cpp index 2cb447a89c..14c1f55035 100644 --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -154,6 +154,20 @@ bool TryReserveRailTrack(TileIndex tile, Track t, bool trigger_stations) return false; } +/** + * Lift the reservation of a specific trackdir on a tile + * This also sets PBS signals to red if unreserving through the facing track direction + * @param tile the tile + * @param t the track + */ +void UnreserveRailTrackdir(TileIndex tile, Trackdir td) +{ + if (HasPbsSignalOnTrackdir(tile, td)) { + SetSignalStateByTrackdir(tile, td, SIGNAL_STATE_RED); + } + UnreserveRailTrack(tile, TrackdirToTrack(td)); +} + /** * Lift the reservation of a specific track on a tile * @param tile the tile diff --git a/src/pbs.h b/src/pbs.h index 5a0bd96651..223aeccacf 100644 --- a/src/pbs.h +++ b/src/pbs.h @@ -24,6 +24,7 @@ void SetRailStationPlatformReservation(TileIndex start, DiagDirection dir, bool bool TryReserveRailTrack(TileIndex tile, Track t, bool trigger_stations = true); bool TryReserveRailTrackdir(TileIndex tile, Trackdir td, bool trigger_stations = true); void UnreserveRailTrack(TileIndex tile, Track t); +void UnreserveRailTrackdir(TileIndex tile, Trackdir td); /** This struct contains information about the end of a reserved path. */ struct PBSTileInfo { diff --git a/src/tracerestrict.cpp b/src/tracerestrict.cpp index 65296bd25b..2a21f8a515 100644 --- a/src/tracerestrict.cpp +++ b/src/tracerestrict.cpp @@ -65,11 +65,6 @@ INSTANTIATE_POOL_METHODS(TraceRestrictProgram) */ TraceRestrictMapping _tracerestrictprogram_mapping; -/** - * Default value for pathfinder penalty instructions - */ -static const uint16 _tracerestrict_penalty_item_default_value = 500; - /** * List of pre-defined pathfinder penalty values * This is indexed by TraceRestrictPathfinderPenaltyPresetIndex diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 09024c7508..a67fe87a8d 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2613,7 +2613,7 @@ static PBSTileInfo ExtendTrainReservation(const Train *v, const PBSTileInfo &ori tile = ft.m_new_tile; cur_td = FindFirstTrackdir(ft.m_new_td_bits); - UnreserveRailTrack(tile, TrackdirToTrack(cur_td)); + UnreserveRailTrackdir(tile, cur_td); } /* Path invalid. */