summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2008-08-22 22:19:23 +0000
committerfrosch <frosch@openttd.org>2008-08-22 22:19:23 +0000
commit7f5cd0e843a30a65286d1d58b6d7b9fa75eb707f (patch)
tree927da08b1cf8d5b447160e872de14df287c4afab
parent1703595861663b414c7c8cd9d90b6f5034fc0cc3 (diff)
downloadopenttd-7f5cd0e843a30a65286d1d58b6d7b9fa75eb707f.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.cpp6
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));
}