Changeset - r12548:5e7f6e787227
[Not reviewed]
master
0 1 0
yexo - 15 years ago 2009-07-30 19:51:29
yexo@openttd.org
(svn r16996) -Fix (r16995): the tiles under the bridge were not marked dirty when a bridge was replaced with another type
1 file changed with 9 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/tunnelbridge_cmd.cpp
Show inline comments
 
@@ -364,26 +364,28 @@ CommandCost CmdBuildBridge(TileIndex end
 
					break;
 

	
 
				default:
 
	not_valid_below:;
 
					/* try and clear the middle landscape */
 
					ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 
					if (CmdFailed(ret)) return ret;
 
					cost.AddCost(ret);
 
					break;
 
			}
 

	
 
			if (flags & DC_EXEC) {
 
				/* We do this here because when replacing a bridge with another
 
				 * type calling SetBridgeMiddle isn't needed. After all, the
 
				 * tile alread has the has_bridge_above bits set. */
 
				SetBridgeMiddle(tile, direction);
 
				MarkTileDirtyByTile(tile);
 
			}
 
		}
 

	
 
		owner = _current_company;
 
	}
 

	
 
	/* do the drill? */
 
	if (flags & DC_EXEC) {
 
		DiagDirection dir = AxisToDiagDir(direction);
 

	
 
		switch (transport_type) {
 
			case TRANSPORT_RAIL:
 
@@ -395,26 +397,30 @@ CommandCost CmdBuildBridge(TileIndex end
 
				MakeRoadBridgeRamp(tile_start, owner, bridge_type, dir,                 roadtypes);
 
				MakeRoadBridgeRamp(tile_end,   owner, bridge_type, ReverseDiagDir(dir), roadtypes);
 
				break;
 

	
 
			case TRANSPORT_WATER:
 
				MakeAqueductBridgeRamp(tile_start, owner, dir);
 
				MakeAqueductBridgeRamp(tile_end,   owner, ReverseDiagDir(dir));
 
				break;
 

	
 
			default:
 
				NOT_REACHED();
 
		}
 
		MarkTileDirtyByTile(tile_start);
 
		MarkTileDirtyByTile(tile_end);
 

	
 
		/* Mark all tiles dirty */
 
		TileIndexDiff delta = (direction == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1));
 
		for (TileIndex tile = tile_start; tile <= tile_end; tile += delta) {
 
			MarkTileDirtyByTile(tile);
 
		}
 
	}
 

	
 
	if ((flags & DC_EXEC) && transport_type == TRANSPORT_RAIL) {
 
		Track track = AxisToTrack(direction);
 
		AddSideToSignalBuffer(tile_start, INVALID_DIAGDIR, _current_company);
 
		YapfNotifyTrackLayoutChange(tile_start, track);
 
	}
 

	
 
	/* for human player that builds the bridge he gets a selection to choose from bridges (DC_QUERY_COST)
 
	 * It's unnecessary to execute this command every time for every bridge. So it is done only
 
	 * and cost is computed in "bridge_gui.c". For AI, Towns this has to be of course calculated
 
	 */
0 comments (0 inline, 0 general)