(svn r4378) -Add and make use of an accessor function two-way => one-way => one-way => two-way signal cycling

pull/155/head
celestar 18 years ago
parent 3207d63244
commit ce320ceb55

@ -703,26 +703,7 @@ int32 CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
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 {

@ -174,6 +174,17 @@ static inline bool IsPresignalExit(TileIndex t)
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,

Loading…
Cancel
Save