From 721d98a7d097f1845f93fa7f944d76e75145aef9 Mon Sep 17 00:00:00 2001 From: Nicolas Chappe <74881848+nchappe@users.noreply.github.com> Date: Wed, 27 Jul 2022 18:56:58 +0200 Subject: [PATCH] Feature: Constantly update destination of 'any depot' orders --- src/train_cmd.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index e2b9d375d2..bb23f4b34f 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2541,6 +2541,7 @@ static Track ChooseTrainTrack(Train *v, TileIndex tile, DiagDirection enterdir, Track best_track = INVALID_TRACK; bool do_track_reservation = _settings_game.pf.reserve_paths || force_res; bool changed_signal = false; + TileIndex final_dest = INVALID_TILE; assert((tracks & ~TRACK_BIT_MASK) == 0); @@ -2613,7 +2614,7 @@ static Track ChooseTrainTrack(Train *v, TileIndex tile, DiagDirection enterdir, bool path_found = true; TileIndex new_tile = res_dest.tile; - Track next_track = DoTrainPathfind(v, new_tile, dest_enterdir, tracks, path_found, do_track_reservation, &res_dest, nullptr); + Track next_track = DoTrainPathfind(v, new_tile, dest_enterdir, tracks, path_found, do_track_reservation, &res_dest, &final_dest); if (new_tile == tile) best_track = next_track; v->HandlePathfindingResult(path_found); } @@ -2687,6 +2688,15 @@ static Track ChooseTrainTrack(Train *v, TileIndex tile, DiagDirection enterdir, if (changed_signal) MarkTileDirtyByTile(tile); + orders.Restore(); + if (v->current_order.IsType(OT_GOTO_DEPOT) && + (v->current_order.GetDepotActionType() & ODATFB_NEAREST_DEPOT) && + final_dest != INVALID_TILE && IsRailDepotTile(final_dest)) { + v->current_order.SetDestination(GetDepotIndex(final_dest)); + v->dest_tile = final_dest; + SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP); + } + return best_track; }