diff options
author | celestar <celestar@openttd.org> | 2006-04-12 09:12:33 +0000 |
---|---|---|
committer | celestar <celestar@openttd.org> | 2006-04-12 09:12:33 +0000 |
commit | 3207d63244e3e2c3c60b281d41a41d74d3a6cadd (patch) | |
tree | f6d8110857bac96dc34a7a8e67ab9016f83d910d | |
parent | 62ded2f58d264835f01245798ece631033351d80 (diff) | |
download | openttd-3207d63244e3e2c3c60b281d41a41d74d3a6cadd.tar.xz |
(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)
-rw-r--r-- | rail_cmd.c | 10 | ||||
-rw-r--r-- | rail_map.h | 10 |
2 files changed, 15 insertions, 5 deletions
diff --git a/rail_cmd.c b/rail_cmd.c index ba6e4d16b..a4e013f9f 100644 --- a/rail_cmd.c +++ b/rail_cmd.c @@ -1498,10 +1498,10 @@ static bool SetSignalsEnumProc(TileIndex tile, SetSignalsData *ssd, int track, u } // 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 @@ static void ChangeSignalStates(SetSignalsData *ssd) 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 @@ make_red: } /* 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]]; diff --git a/rail_map.h b/rail_map.h index 850a56c54..da72d0250 100644 --- a/rail_map.h +++ b/rail_map.h @@ -164,6 +164,16 @@ static inline void SetSignalType(TileIndex t, SignalType s) 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, |