From 86818e5ae8a170951d00eb0060767c9d1687540c Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 14 Jan 2021 18:41:38 +0100 Subject: [PATCH] Fix #7670: prevent useless pathfinder run for blocked vehicles --- src/roadveh_cmd.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 17c9c39e96..f0c2c8aa4a 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1389,7 +1389,16 @@ again: int y = TileY(v->tile) * TILE_SIZE + rdp[turn_around_start_frame].y; Direction new_dir = RoadVehGetSlidingDirection(v, x, y); - if (v->IsFrontEngine() && RoadVehFindCloseTo(v, x, y, new_dir) != nullptr) return false; + if (v->IsFrontEngine() && RoadVehFindCloseTo(v, x, y, new_dir) != nullptr) { + /* We are blocked. */ + v->cur_speed = 0; + if (!v->path.empty()) { + /* Prevent pathfinding rerun as we already know where we are heading to. */ + v->path.tile.push_front(v->tile); + v->path.td.push_front(dir); + } + return false; + } uint32 r = VehicleEnterTile(v, v->tile, x, y); if (HasBit(r, VETS_CANNOT_ENTER)) {