Mercurial > hg > openttd
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: