Changeset - r3284:d4747e3ae95e
[Not reviewed]
master
0 1 0
peter1138 - 19 years ago 2006-03-21 21:11:41
peter1138@openttd.org
(svn r3998) - Fix: When removing rail track from a while where only X and Y (/ and \) pieces exist, explicitly update signals in both directions.
1 file changed with 11 insertions and 0 deletions:
0 comments (0 inline, 0 general)
rail_cmd.c
Show inline comments
 
@@ -363,6 +363,7 @@ int32 CmdRemoveSingleRail(int x, int y, 
 
	TrackBits trackbit;
 
	TileIndex tile;
 
	int32 cost = _price.remove_rail;
 
	bool crossing = false;
 

	
 
	if (!ValParamTrackOrientation(p2)) return CMD_ERROR;
 
	trackbit = TrackToTrackBits(track);
 
@@ -411,6 +412,7 @@ int32 CmdRemoveSingleRail(int x, int y, 
 

	
 
			present = GetTrackBits(tile);
 
			if ((present & trackbit) == 0) return CMD_ERROR;
 
			if (present == (TRACK_BIT_X | TRACK_BIT_Y)) crossing = true;
 

	
 
			/* Charge extra to remove signals on the track, if they are there */
 
			if (HasSignalOnTrack(tile, track))
 
@@ -432,8 +434,17 @@ int32 CmdRemoveSingleRail(int x, int y, 
 

	
 
	if (flags & DC_EXEC) {
 
		MarkTileDirtyByTile(tile);
 
		if (crossing) {
 
			/* crossing is set when only TRACK_BIT_X and TRACK_BIT_Y are set. As we
 
			 * are removing one of these pieces, we'll need to update signals for
 
			 * both directions explicitly, as after the track is removed it won't
 
			 * 'connect' with the other piece. */
 
			SetSignalsOnBothDir(tile, TRACK_X);
 
			SetSignalsOnBothDir(tile, TRACK_Y);
 
		} else {
 
		SetSignalsOnBothDir(tile, track);
 
	}
 
	}
 

	
 
	return cost;
 
}
0 comments (0 inline, 0 general)