diff options
author | peter1138 <peter1138@openttd.org> | 2006-03-21 21:11:41 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2006-03-21 21:11:41 +0000 |
commit | fd75fb6766c8ed67c23d69d30b18c69d8ca20d98 (patch) | |
tree | f49e76b54263d57cbe4cffd24067044c2f8e96ee | |
parent | 231d82925379f2a558a58ccffe282bf0c8d59748 (diff) | |
download | openttd-fd75fb6766c8ed67c23d69d30b18c69d8ca20d98.tar.xz |
(svn r3998) - Fix: When removing rail track from a while where only X and Y (/ and \) pieces exist, explicitly update signals in both directions.
-rw-r--r-- | rail_cmd.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/rail_cmd.c b/rail_cmd.c index a89717d78..2bd19479c 100644 --- a/rail_cmd.c +++ b/rail_cmd.c @@ -363,6 +363,7 @@ int32 CmdRemoveSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2) 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, uint32 flags, uint32 p1, uint32 p2) 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,7 +434,16 @@ int32 CmdRemoveSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2) if (flags & DC_EXEC) { MarkTileDirtyByTile(tile); - SetSignalsOnBothDir(tile, track); + 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; |