mirror of https://github.com/OpenTTD/OpenTTD
(svn r4378) -Add and make use of an accessor function two-way => one-way => one-way => two-way signal cycling
parent
5ae9a03a1f
commit
923a0e60d6
21
rail_cmd.c
21
rail_cmd.c
|
@ -703,26 +703,7 @@ int32 CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
|
|
||||||
SetSignalType(tile, type == SIGTYPE_COMBO ? SIGTYPE_NORMAL : type + 1);
|
SetSignalType(tile, type == SIGTYPE_COMBO ? SIGTYPE_NORMAL : type + 1);
|
||||||
} else {
|
} else {
|
||||||
// cycle between two-way -> one-way -> one-way -> ...
|
CycleSignalSide(tile, track);
|
||||||
/* 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
11
rail_map.h
11
rail_map.h
|
@ -174,6 +174,17 @@ static inline bool IsPresignalExit(TileIndex t)
|
||||||
return GetSignalType(t) == SIGTYPE_EXIT || GetSignalType(t) == SIGTYPE_COMBO;
|
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 {
|
typedef enum SignalVariant {
|
||||||
SIG_ELECTRIC = 0,
|
SIG_ELECTRIC = 0,
|
||||||
|
|
Loading…
Reference in New Issue