(svn r14039) -Fix [FS#2217]: reversing an overlength train at a station would try to find a route out and sometimes reset the unload counter making it wait 2.5 years before departing instead of waiting until the train would actually leave the station (michi_cc)
authorrubidium
Sun, 10 Aug 2008 21:56:47 +0000
changeset 9891 edc31db66fbb
parent 9890 d78e15f4ac71
child 9892 8dc6b933e669
(svn r14039) -Fix [FS#2217]: reversing an overlength train at a station would try to find a route out and sometimes reset the unload counter making it wait 2.5 years before departing instead of waiting until the train would actually leave the station (michi_cc)
src/train_cmd.cpp
src/vehicle.cpp
--- a/src/train_cmd.cpp	Sun Aug 10 19:00:33 2008 +0000
+++ b/src/train_cmd.cpp	Sun Aug 10 21:56:47 2008 +0000
@@ -1950,9 +1950,12 @@
 			!IsPbsSignal(GetSignalType(v->tile, FindFirstTrack(v->u.rail.track))));
 
 		if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(GetVehicleTrackdir(v)), true);
-		if (TryPathReserve(v, true, first_tile_okay)) {
+		if (TryPathReserve(v, false, first_tile_okay)) {
 			/* Do a look-ahead now in case our current tile was already a safe tile. */
 			CheckNextTrainTile(v);
+		} else if (v->current_order.GetType() != OT_LOADING) {
+			/* Do not wait for a way out when we're still loading */
+			MarkTrainAsStuck(v);
 		}
 	}
 }
--- a/src/vehicle.cpp	Sun Aug 10 19:00:33 2008 +0000
+++ b/src/vehicle.cpp	Sun Aug 10 21:56:47 2008 +0000
@@ -2345,8 +2345,16 @@
 	HideFillingPercent(this->fill_percent_te_id);
 	this->fill_percent_te_id = INVALID_TE_ID;
 
-	/* Trigger station animation for trains only */
-	if (this->type == VEH_TRAIN && IsTileType(this->tile, MP_STATION)) StationAnimationTrigger(st, this->tile, STAT_ANIM_TRAIN_DEPARTS);
+	if (this->type == VEH_TRAIN) {
+		/* Trigger station animation (trains only) */
+		if (IsTileType(this->tile, MP_STATION)) StationAnimationTrigger(st, this->tile, STAT_ANIM_TRAIN_DEPARTS);
+
+		/* Try to reserve a path when leaving the station as we
+		 * might not be marked as wanting a reservation, e.g.
+		 * when an overlenght train gets turned around in a station.
+		 */
+		TryPathReserve(this, true, true);
+	}
 }