changeset 17142:958bcdb45229 draft

(svn r21880) -Fix: when a train after reversing ended at the last bit of a bridge ramp and directed outside the bridge, it could still have track set to TRACK_BIT_WORMHOLE
author smatz <smatz@openttd.org>
date Fri, 21 Jan 2011 16:35:12 +0000
parents 4ccee6c9442b
children d2394a934993
files src/train_cmd.cpp
diffstat 1 files changed, 16 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -1454,6 +1454,22 @@
 	/* Call the proper EnterTile function unless we are in a wormhole. */
 	if (v->track != TRACK_BIT_WORMHOLE) {
 		VehicleEnterTile(v, v->tile, v->x_pos, v->y_pos);
+	} else {
+		/* VehicleEnter_TunnelBridge() sets TRACK_BIT_WORMHOLE when the vehicle
+		 * is on the last bit of the bridge head (frame == TILE_SIZE - 1).
+		 * If we were swapped with such a vehicle, we have set TRACK_BIT_WORMHOLE,
+		 * when we shouldn't have. Check if this is the case. */
+		TileIndex vt = TileVirtXY(v->x_pos, v->y_pos);
+		if (IsTileType(vt, MP_TUNNELBRIDGE)) {
+			VehicleEnterTile(v, vt, v->x_pos, v->y_pos);
+			if (v->track != TRACK_BIT_WORMHOLE && IsBridgeTile(v->tile)) {
+				/* We have just left the wormhole, possibly set the
+				 * "goingdown" bit. UpdateInclination() can be used
+				 * because we are at the border of the tile. */
+				v->UpdateInclination(true, true);
+				return;
+			}
+		}
 	}
 
 	v->UpdateViewport(true, true);