summaryrefslogtreecommitdiff
path: root/src/vehicle.cpp
diff options
context:
space:
mode:
authorHenry Wilson <m3henry@googlemail.com>2019-02-08 22:37:41 +0000
committerPeterN <peter@fuzzle.org>2019-02-08 23:23:41 +0000
commitd03cb80346dac780973744af35f5251c4cdeb138 (patch)
tree752f0c2b761c0ed358e5bd5991617fd552c2e2b9 /src/vehicle.cpp
parent37bb2c930828260cd28365c8d96befea096bacd6 (diff)
downloadopenttd-d03cb80346dac780973744af35f5251c4cdeb138.tar.xz
Fix: trains cancelling their pending reversal when ordered to go to a depot behind them
Previously, if a train had been ordered to reverse, and while it was slowing down, was ordered to travel to a depot that is behind it, the train would continue forwards. Also when a train had been ordered to reverse, and while it was slowing down, was ordered to travel to a depot that is in front of it, the train would not cancel the reversal. In both cases the train would travel away from the target depot. Trains in this situation now behave correctly and will travel towards the depot.
Diffstat (limited to 'src/vehicle.cpp')
-rw-r--r--src/vehicle.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/vehicle.cpp b/src/vehicle.cpp
index 53220474e..f655bbafc 100644
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -2356,8 +2356,10 @@ CommandCost Vehicle::SendToDepot(DoCommandFlag flags, DepotCommand command)
if (!(command & DEPOT_SERVICE)) this->current_order.SetDepotActionType(ODATFB_HALT);
SetWindowWidgetDirty(WC_VEHICLE_VIEW, this->index, WID_VV_START_STOP);
- /* If there is no depot in front, reverse automatically (trains only) */
- if (this->type == VEH_TRAIN && reverse) DoCommand(this->tile, this->index, 0, DC_EXEC, CMD_REVERSE_TRAIN_DIRECTION);
+ /* If there is no depot in front and the train is not already reversing, reverse automatically (trains only) */
+ if (this->type == VEH_TRAIN && (reverse ^ HasBit(Train::From(this)->flags, VRF_REVERSING))) {
+ DoCommand(this->tile, this->index, 0, DC_EXEC, CMD_REVERSE_TRAIN_DIRECTION);
+ }
if (this->type == VEH_AIRCRAFT) {
Aircraft *a = Aircraft::From(this);