diff options
author | frosch <frosch@openttd.org> | 2008-08-22 22:19:23 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2008-08-22 22:19:23 +0000 |
commit | b03fcdf323d7cd77a7f423fb94fd14471dc965a2 (patch) | |
tree | 927da08b1cf8d5b447160e872de14df287c4afab | |
parent | c428ce627783b8182dea53ece648a49f09f5d7c4 (diff) | |
download | openttd-b03fcdf323d7cd77a7f423fb94fd14471dc965a2.tar.xz |
(svn r14129) -Fix (r13935) [FS#2247]: Signal state for PBS signals was not updated when cycling the signal side. Patch by michi_cc with a small addition from me.
-rw-r--r-- | src/rail_cmd.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 2b5227c03..121512b8e 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -908,7 +908,8 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 if (ctrl_pressed) { /* toggle the pressent signal variant: SIG_ELECTRIC <-> SIG_SEMAPHORE */ SetSignalVariant(tile, track, (GetSignalVariant(tile, track) == SIG_ELECTRIC) ? SIG_SEMAPHORE : SIG_ELECTRIC); - + /* Query current signal type so the check for PBS signals below works. */ + sigtype = GetSignalType(tile, track); } else { /* convert the present signal to the chosen type and variant */ SetSignalType(tile, track, sigtype); @@ -931,6 +932,8 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 } else { /* cycle the signal side: both -> left -> right -> both -> ... */ CycleSignalSide(tile, track); + /* Query current signal type so the check for PBS signals below works. */ + sigtype = GetSignalType(tile, track); } } } else { @@ -942,6 +945,7 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 } if (IsPbsSignal(sigtype)) { + /* PBS signals should show red unless they are on a reservation. */ uint mask = GetPresentSignals(tile) & SignalOnTrack(track); SetSignalStates(tile, (GetSignalStates(tile) & ~mask) | ((HasBit(GetTrackReservation(tile), track) ? (uint)-1 : 0) & mask)); } |