changeset 11891:33132948b7e4 draft

(svn r16291) -Fix [FS#2893]: RVs were unable to find a depot when turning around (in some cases), causing 'nearest depot' orders to be occasionally lost.
author rubidium <rubidium@openttd.org>
date Wed, 13 May 2009 10:58:41 +0000
parents 177797bd2a98
children 44ee3c88f4f0
files src/vehicle.cpp
diffstat 1 files changed, 5 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -1219,13 +1219,12 @@
 			if (IsStandardRoadStopTile(v->tile)) // We'll assume the road vehicle is facing outwards
 				return DiagDirToDiagTrackdir(GetRoadStopDir(v->tile)); // Road vehicle in a station
 
-			if (IsDriveThroughStopTile(v->tile)) return DiagDirToDiagTrackdir(DirToDiagDir(v->direction));
+			/* Drive through road stops / wormholes (tunnels) */
+			if (v->u.road.state > RVSB_TRACKDIR_MASK) return DiagDirToDiagTrackdir(DirToDiagDir(v->direction));
 
-			/* If vehicle's state is a valid track direction (vehicle is not turning around) return it */
-			if (!IsReversingRoadTrackdir((Trackdir)v->u.road.state)) return (Trackdir)v->u.road.state;
-
-			/* Vehicle is turning around, get the direction from vehicle's direction */
-			return DiagDirToDiagTrackdir(DirToDiagDir(v->direction));
+			/* If vehicle's state is a valid track direction (vehicle is not turning around) return it,
+			 * otherwise transform it into a valid track direction */
+			return (Trackdir)((IsReversingRoadTrackdir((Trackdir)v->u.road.state)) ? (v->u.road.state - 6) : v->u.road.state);
 
 		/* case VEH_AIRCRAFT: case VEH_EFFECT: case VEH_DISASTER: */
 		default: return INVALID_TRACKDIR;