From 30817c39153b7d822d17e6d0435212c3b3f117a3 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 3 Jan 2022 12:47:44 +0000 Subject: [PATCH] Fix VRF_BEYOND_PLATFORM_END not being cleared when switching order --- src/order_cmd.cpp | 7 +++++++ src/rail_cmd.cpp | 4 ++++ src/train_cmd.cpp | 4 ++++ src/vehicle.cpp | 6 ++++++ 4 files changed, 21 insertions(+) diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 55d37f67a9..b1b9bcf1de 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -37,6 +37,7 @@ #include "order_cmd.h" #include "vehiclelist.h" #include "tracerestrict.h" +#include "train.h" #include "table/strings.h" @@ -1462,6 +1463,12 @@ CommandCost CmdSkipToOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (v->current_order.IsAnyLoadingType()) v->LeaveStation(); if (v->current_order.IsType(OT_WAITING)) v->HandleWaiting(true); + if (v->type == VEH_TRAIN) { + for (Train *u = Train::From(v); u != nullptr; u = u->Next()) { + ClrBit(u->flags, VRF_BEYOND_PLATFORM_END); + } + } + v->cur_implicit_order_index = v->cur_real_order_index = sel_ord; v->UpdateRealOrderIndex(); v->cur_timetable_order_index = INVALID_VEH_ORDER_ID; diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 67bd105cd9..7810c16b37 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -4072,6 +4072,10 @@ static VehicleEnterTileStatus VehicleEnter_Track(Vehicle *u, TileIndex tile, int if (order != nullptr && order->IsType(OT_GOTO_STATION) && order->GetDestination() == v->last_station_visited) { v->IncrementImplicitOrderIndex(); } + } else { + for (Train *u = v; u != nullptr; u = u->Next()) { + ClrBit(u->flags, VRF_BEYOND_PLATFORM_END); + } } }; diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index f82da280e0..e558d23919 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -6590,6 +6590,10 @@ static void CheckIfTrainNeedsService(Train *v) v->current_order.MakeGoToDepot(depot, ODTFB_SERVICE); v->dest_tile = tfdd.tile; SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP); + + for (Train *u = v; u != nullptr; u = u->Next()) { + ClrBit(u->flags, VRF_BEYOND_PLATFORM_END); + } } /** Update day counters of the train vehicle. */ diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 7f820d93ab..23f4a358d2 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -3669,6 +3669,12 @@ CommandCost Vehicle::SendToDepot(DoCommandFlag flags, DepotCommand command, Tile if (flags & DC_EXEC) { if (this->current_order.IsAnyLoadingType()) this->LeaveStation(); + if (this->type == VEH_TRAIN) { + for (Train *v = Train::From(this); v != nullptr; v = v->Next()) { + ClrBit(v->flags, VRF_BEYOND_PLATFORM_END); + } + } + if (this->IsGroundVehicle() && this->GetNumManualOrders() > 0) { uint16 &gv_flags = this->GetGroundVehicleFlags(); SetBit(gv_flags, GVF_SUPPRESS_IMPLICIT_ORDERS);