changeset 9972:e50a5bff98bc draft

(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.
author frosch <frosch@openttd.org>
date Fri, 22 Aug 2008 22:19:23 +0000
parents a6e03c53919e
children ed2e764e5d6b
files src/rail_cmd.cpp
diffstat 1 files changed, 5 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/rail_cmd.cpp
+++ b/src/rail_cmd.cpp
@@ -908,7 +908,8 @@
 					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 @@
 				} 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 @@
 		}
 
 		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));
 		}