src/train_cmd.cpp
changeset 8763 19e9841201f8
parent 8760 ce0891c412ce
child 8766 c86cfa3a7580
--- a/src/train_cmd.cpp	Sun Jan 13 12:08:35 2008 +0000
+++ b/src/train_cmd.cpp	Sun Jan 13 13:11:59 2008 +0000
@@ -3107,6 +3107,8 @@
  */
 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,13 +3116,22 @@
 	for (; v->Next() != NULL; v = v->Next()) u = v;
 	u->SetNext(NULL);
 
-	InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
-	DeleteWindowById(WC_VEHICLE_VIEW, v->index);
+	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();
-	InvalidateWindow(WC_COMPANY, v->owner);
-	if (v->u.rail.track == TRACK_BIT_DEPOT) {
-		InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
-	}
 
 	BeginVehicleMove(v);
 	EndVehicleMove(v);