Mercurial > hg > openttd
changeset 3522:284cd96c8794 draft
(svn r4378) -Add and make use of an accessor function two-way => one-way => one-way => two-way signal cycling
author | celestar <celestar@openttd.org> |
---|---|
date | Wed, 12 Apr 2006 09:36:27 +0000 |
parents | fb43c34a2b37 |
children | ca4aa6c713e9 |
files | rail_cmd.c rail_map.h |
diffstat | 2 files changed, 12 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/rail_cmd.c +++ b/rail_cmd.c @@ -703,26 +703,7 @@ SetSignalType(tile, type == SIGTYPE_COMBO ? SIGTYPE_NORMAL : type + 1); } else { - // cycle between two-way -> one-way -> one-way -> ... - /* TODO: Rewrite switch into something more general */ - switch (track) { - case TRACK_LOWER: - case TRACK_RIGHT: { - byte signal = (_m[tile].m3 - 0x10) & 0x30; - if (signal == 0) signal = 0x30; - _m[tile].m3 &= ~0x30; - _m[tile].m3 |= signal; - break; - } - - default: { - byte signal = (_m[tile].m3 - 0x40) & 0xC0; - if (signal == 0) signal = 0xC0; - _m[tile].m3 &= ~0xC0; - _m[tile].m3 |= signal; - break; - } - } + CycleSignalSide(tile, track); } } } else {
--- a/rail_map.h +++ b/rail_map.h @@ -174,6 +174,17 @@ return GetSignalType(t) == SIGTYPE_EXIT || GetSignalType(t) == SIGTYPE_COMBO; } +static inline void CycleSignalSide(TileIndex t, Track track) +{ + byte sig; + byte pos = 6; + if (track == TRACK_LOWER || track == TRACK_RIGHT) pos = 4; + + sig = GB(_m[t].m3, pos, 2); + if (--sig == 0) sig = 3; + SB(_m[t].m3, pos, 2, sig); +} + typedef enum SignalVariant { SIG_ELECTRIC = 0,