From c461999b2b543238d0be2f88ea3d88544c2114ab Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 13 Feb 2021 22:18:12 +0000 Subject: [PATCH] Fix #8594: [NRT] Road pathfinder did not account for roadtype speed limits --- src/pathfinder/follow_track.hpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp index 5bc9ab03cd..cac8ec5c5a 100644 --- a/src/pathfinder/follow_track.hpp +++ b/src/pathfinder/follow_track.hpp @@ -466,13 +466,18 @@ public: if (!IsWaterTT() && IsBridgeTile(m_old_tile)) { int spd = GetBridgeSpec(GetBridgeType(m_old_tile))->speed; if (IsRoadTT()) spd *= 2; - if (max_speed > spd) max_speed = spd; + max_speed = std::min(max_speed, spd); } /* Check for speed limit imposed by railtype */ if (IsRailTT()) { uint16 rail_speed = GetRailTypeInfo(GetRailType(m_old_tile))->max_speed; if (rail_speed > 0) max_speed = std::min(max_speed, rail_speed); } + if (IsRoadTT()) { + /* max_speed is already in roadvehicle units, no need to further modify (divide by 2) */ + uint16 road_speed = GetRoadTypeInfo(GetRoadType(m_old_tile, GetRoadTramType(RoadVehicle::From(m_veh)->roadtype)))->max_speed; + if (road_speed > 0) max_speed = std::min(max_speed, road_speed); + } /* if min speed was requested, return it */ if (pmin_speed != nullptr) *pmin_speed = min_speed;