(svn r4377) -Add and make use of a function that finds out whether a signal is an entry or and exit signal to a presignal block (as combos act as both)
authorcelestar
Wed, 12 Apr 2006 09:12:33 +0000
changeset 3521 c5dda2dbd977
parent 3520 092efede26b3
child 3522 25ce619b9a19
(svn r4377) -Add and make use of a function that finds out whether a signal is an entry or and exit signal to a presignal block (as combos act as both)
rail_cmd.c
rail_map.h
--- a/rail_cmd.c	Wed Apr 12 08:28:03 2006 +0000
+++ b/rail_cmd.c	Wed Apr 12 09:12:33 2006 +0000
@@ -1498,10 +1498,10 @@
 			}
 
 			// remember if this block has a presignal.
-			ssd->has_presignal |= (_m[tile].m4 & 1);
+			ssd->has_presignal |= IsPresignalEntry(tile);
 		}
 
-		if (HasSignalOnTrackdir(tile, track) && _m[tile].m4 & 2) {
+		if (HasSignalOnTrackdir(tile, track) && IsPresignalExit(tile)) {
 			// this is an exit signal that points out from the segment
 			ssd->presignal_exits++;
 			if (GetSignalStateByTrackdir(tile, track) != SIGNAL_STATE_RED)
@@ -1647,11 +1647,11 @@
 		uint16 m2 = _m[tile].m2;
 
 		// presignals don't turn green if there is at least one presignal exit and none are free
-		if (_m[tile].m4 & 1) {
+		if (IsPresignalEntry(tile)) {
 			int ex = ssd->presignal_exits, exfree = ssd->presignal_exits_free;
 
 			// subtract for dual combo signals so they don't count themselves
-			if (_m[tile].m4 & 2 && HasSignalOnTrackdir(tile, ssd->bit[i])) {
+			if (IsPresignalExit(tile) && HasSignalOnTrackdir(tile, ssd->bit[i])) {
 				ex--;
 				if (GetSignalStateByTrackdir(tile, ssd->bit[i]) != SIGNAL_STATE_RED) exfree--;
 			}
@@ -1671,7 +1671,7 @@
 		}
 
 		/* Update signals on the other side of this exit-combo signal; it changed. */
-		if (_m[tile].m4 & 2) {
+		if (IsPresignalExit(tile)) {
 			if (ssd->cur_stack != NUM_SSD_STACK) {
 				ssd->next_tile[ssd->cur_stack] = tile;
 				ssd->next_dir[ssd->cur_stack] = _dir_from_track[ssd->bit[i]];
--- a/rail_map.h	Wed Apr 12 08:28:03 2006 +0000
+++ b/rail_map.h	Wed Apr 12 09:12:33 2006 +0000
@@ -164,6 +164,16 @@
 	SB(_m[t].m4, 0, 2, s);
 }
 
+static inline bool IsPresignalEntry(TileIndex t)
+{
+	return GetSignalType(t) == SIGTYPE_ENTRY || GetSignalType(t) == SIGTYPE_COMBO;
+}
+
+static inline bool IsPresignalExit(TileIndex t)
+{
+	return GetSignalType(t) == SIGTYPE_EXIT || GetSignalType(t) == SIGTYPE_COMBO;
+}
+
 
 typedef enum SignalVariant {
 	SIG_ELECTRIC  = 0,