changeset 19899:4f44e1c86f9c draft

(svn r24832) -Fix [FS#5397]: [NewGRF] Take bridge speed limits into account for vehicle variable 4C.
author michi_cc <michi_cc@openttd.org>
date Thu, 20 Dec 2012 19:43:58 +0000
parents 004b4ee1823f
children b4c4f1c24136
files src/roadveh_cmd.cpp src/train_cmd.cpp
diffstat 2 files changed, 10 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/roadveh_cmd.cpp
+++ b/src/roadveh_cmd.cpp
@@ -421,6 +421,11 @@
 		} else if ((u->direction & 1) == 0) {
 			max_speed = this->vcache.cached_max_speed * 3 / 4;
 		}
+
+		/* Vehicle is on the middle part of a bridge. */
+		if (u->state == RVSB_WORMHOLE && !(u->vehstatus & VS_HIDDEN)) {
+			max_speed = min(max_speed, GetBridgeSpec(GetBridgeType(u->tile))->speed * 2);
+		}
 	}
 
 	return min(max_speed, this->current_order.max_speed * 2);
@@ -1095,12 +1100,6 @@
 		/* Vehicle is entering a depot or is on a bridge or in a tunnel */
 		GetNewVehiclePosResult gp = GetNewVehiclePos(v);
 
-		/* Apply bridge speed limit */
-		if (!(v->vehstatus & VS_HIDDEN)) {
-			RoadVehicle *first = v->First();
-			first->cur_speed = min(first->cur_speed, GetBridgeSpec(GetBridgeType(v->tile))->speed * 2);
-		}
-
 		if (v->IsFrontEngine()) {
 			const Vehicle *u = RoadVehFindCloseTo(v, gp.x, gp.y, v->direction);
 			if (u != NULL) {
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -403,6 +403,11 @@
 			max_speed = min(max_speed, 61);
 			break;
 		}
+
+		/* Vehicle is on the middle part of a bridge. */
+		if (u->track == TRACK_BIT_WORMHOLE && !(u->vehstatus & VS_HIDDEN)) {
+			max_speed = min(max_speed, GetBridgeSpec(GetBridgeType(u->tile))->speed);
+		}
 	}
 
 	max_speed = min(max_speed, this->current_order.max_speed);
@@ -3250,14 +3255,6 @@
 				}
 			}
 		} else {
-			/* In a tunnel or on a bridge
-			 * - for tunnels, only the part when the vehicle is not visible (part of enter/exit tile too)
-			 * - for bridges, only the middle part - without the bridge heads */
-			if (!(v->vehstatus & VS_HIDDEN)) {
-				Train *first = v->First();
-				first->cur_speed = min(first->cur_speed, GetBridgeSpec(GetBridgeType(v->tile))->speed);
-			}
-
 			if (IsTileType(gp.new_tile, MP_TUNNELBRIDGE) && HasBit(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y), VETS_ENTERED_WORMHOLE)) {
 				/* Perform look-ahead on tunnel exit. */
 				if (v->IsFrontEngine()) {