diff options
author | frosch <frosch@openttd.org> | 2010-03-10 20:44:04 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2010-03-10 20:44:04 +0000 |
commit | c0a9215bad60a6e58274b9891bf981faea697bc1 (patch) | |
tree | 530f9a6cba7335d77c7b7b4afbb4a78a41bc193c | |
parent | 22081cbd19a95c01bacc7db38d07a4d4a05f1e2c (diff) | |
download | openttd-c0a9215bad60a6e58274b9891bf981faea697bc1.tar.xz |
(svn r19383) -Fix [FS#3680]: Overbuilding bridges cleared PBS reservation.
-rw-r--r-- | src/tunnelbridge_cmd.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 81688b6bc..aefb074d3 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -256,6 +256,7 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u 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 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u 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 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u 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: |