summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/train_cmd.cpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index efa820cc1..1bbec7cb1 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -3107,6 +3107,8 @@ reverse_train_direction:
*/
static void DeleteLastWagon(Vehicle *v)
{
+ Vehicle *first = v->First();
+
/* Go to the last wagon and delete the link pointing there
* *u is then the one-before-last wagon, and *v the last
* one which will physicially be removed */
@@ -3114,14 +3116,23 @@ static void DeleteLastWagon(Vehicle *v)
for (; v->Next() != NULL; v = v->Next()) u = v;
u->SetNext(NULL);
- InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
- DeleteWindowById(WC_VEHICLE_VIEW, v->index);
- RebuildVehicleLists();
- InvalidateWindow(WC_COMPANY, v->owner);
- if (v->u.rail.track == TRACK_BIT_DEPOT) {
- InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
+ if (first == v) {
+ /* Removing front vehicle (the last to go) */
+ DeleteWindowById(WC_VEHICLE_VIEW, v->index);
+ InvalidateWindow(WC_COMPANY, v->owner);
+ } else {
+ /* Recalculate cached train properties */
+ TrainConsistChanged(first);
+ InvalidateWindow(WC_VEHICLE_DETAILS, first->index);
+ /* Update the depot window if the first vehicle is in depot -
+ * if v == first, then it is updated in PreDestructor() */
+ if (first->u.rail.track == TRACK_BIT_DEPOT) {
+ InvalidateWindow(WC_VEHICLE_DEPOT, first->tile);
+ }
}
+ RebuildVehicleLists();
+
BeginVehicleMove(v);
EndVehicleMove(v);