changeset 12871:85bcb9cf3a84 draft

(svn r17363) -Fix [FS#3163] (r16717): feed autoreplace the front of vehicles, otherwise it gets distracted and bails out
author rubidium <rubidium@openttd.org>
date Tue, 01 Sep 2009 21:54:59 +0000
parents 8ea35e2237a3
children a286dcbc6260
files src/rail_cmd.cpp src/road_cmd.cpp src/vehicle.cpp
diffstat 3 files changed, 5 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/rail_cmd.cpp
+++ b/src/rail_cmd.cpp
@@ -2419,7 +2419,7 @@
 			v->track = TRACK_BIT_DEPOT,
 			v->vehstatus |= VS_HIDDEN; // hide it
 			v->direction = ReverseDir(v->direction);
-			if (v->Next() == NULL) VehicleEnterDepot(v);
+			if (v->Next() == NULL) VehicleEnterDepot(v->First());
 			v->tile = tile;
 
 			InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
--- a/src/road_cmd.cpp
+++ b/src/road_cmd.cpp
@@ -1550,7 +1550,7 @@
 				rv->state = RVSB_IN_DEPOT;
 				rv->vehstatus |= VS_HIDDEN;
 				rv->direction = ReverseDir(rv->direction);
-				if (rv->Next() == NULL) VehicleEnterDepot(rv);
+				if (rv->Next() == NULL) VehicleEnterDepot(rv->First());
 				rv->tile = tile;
 
 				InvalidateWindowData(WC_VEHICLE_DEPOT, rv->tile);
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -954,6 +954,9 @@
 
 void VehicleEnterDepot(Vehicle *v)
 {
+	/* Always work with the front of the vehicle */
+	assert(v == v->First());
+
 	switch (v->type) {
 		case VEH_TRAIN: {
 			Train *t = Train::From(v);
@@ -962,7 +965,6 @@
 			SetDepotReservation(t->tile, false);
 			if (_settings_client.gui.show_track_reservation) MarkTileDirtyByTile(t->tile);
 
-			if (!t->IsFrontEngine()) t = t->First();
 			UpdateSignalsOnSegment(t->tile, INVALID_DIAGDIR, t->owner);
 			t->load_unload_time_rem = 0;
 			ClrBit(t->flags, VRF_TOGGLE_REVERSE);
@@ -972,7 +974,6 @@
 
 		case VEH_ROAD:
 			InvalidateWindowClasses(WC_ROADVEH_LIST);
-			if (!RoadVehicle::From(v)->IsRoadVehFront()) v = v->First();
 			break;
 
 		case VEH_SHIP: