changeset 14794:a1410dd4d9da draft

(svn r19383) -Fix [FS#3680]: Overbuilding bridges cleared PBS reservation.
author frosch <frosch@openttd.org>
date Wed, 10 Mar 2010 20:44:04 +0000
parents c9ea26de660d
children ca2563247d8d
files src/tunnelbridge_cmd.cpp
diffstat 1 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/tunnelbridge_cmd.cpp
+++ b/src/tunnelbridge_cmd.cpp
@@ -256,6 +256,7 @@
 	uint z_end;
 	Slope tileh_start = GetTileSlope(tile_start, &z_start);
 	Slope tileh_end = GetTileSlope(tile_end, &z_end);
+	bool pbs_reservation = false;
 
 	CommandCost terraform_cost_north = CheckBridgeSlopeNorth(direction, &tileh_start, &z_start);
 	CommandCost terraform_cost_south = CheckBridgeSlopeSouth(direction, &tileh_end,   &z_end);
@@ -298,8 +299,19 @@
 		cost.AddCost((bridge_len + 1) * _price[PR_CLEAR_BRIDGE]); // The cost of clearing the current bridge.
 		owner = GetTileOwner(tile_start);
 
-		/* Do not remove road types when upgrading a bridge */
-		roadtypes |= GetRoadTypes(tile_start);
+		switch (transport_type) {
+			case TRANSPORT_RAIL:
+				/* Keep the reservation, the path stays valid. */
+				pbs_reservation = HasTunnelBridgeReservation(tile_start);
+				break;
+
+			case TRANSPORT_ROAD:
+				/* Do not remove road types when upgrading a bridge */
+				roadtypes |= GetRoadTypes(tile_start);
+				break;
+
+			default: break;
+		}
 	} else {
 		/* Build a new bridge. */
 
@@ -404,6 +416,8 @@
 			case TRANSPORT_RAIL:
 				MakeRailBridgeRamp(tile_start, owner, bridge_type, dir,                 railtype);
 				MakeRailBridgeRamp(tile_end,   owner, bridge_type, ReverseDiagDir(dir), railtype);
+				SetTunnelBridgeReservation(tile_start, pbs_reservation);
+				SetTunnelBridgeReservation(tile_end,   pbs_reservation);
 				break;
 
 			case TRANSPORT_ROAD: