Fix aspect propagation issues with combined shunt/normal signals
This commit is contained in:
@@ -711,7 +711,7 @@ static uint8 GetForwardAspect(const SigInfo &info, TileIndex tile, Trackdir trac
|
|||||||
|
|
||||||
static uint8 GetForwardAspectAndIncrement(const SigInfo &info, TileIndex tile, Trackdir trackdir, bool combined_normal_mode = false)
|
static uint8 GetForwardAspectAndIncrement(const SigInfo &info, TileIndex tile, Trackdir trackdir, bool combined_normal_mode = false)
|
||||||
{
|
{
|
||||||
return std::min<uint8>(GetForwardAspect(info, tile, trackdir) + (combined_normal_mode ? 2 : 1), GetMaximumSignalAspect());
|
return IncrementAspectForSignal(GetForwardAspect(info, tile, trackdir), combined_normal_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool IsRailCombinedNormalShuntSignalStyle(TileIndex tile, Track track)
|
static inline bool IsRailCombinedNormalShuntSignalStyle(TileIndex tile, Track track)
|
||||||
@@ -844,7 +844,8 @@ static void UpdateSignalsAroundSegment(SigInfo info)
|
|||||||
if (newstate == SIGNAL_STATE_GREEN) {
|
if (newstate == SIGNAL_STATE_GREEN) {
|
||||||
aspect = 1;
|
aspect = 1;
|
||||||
if (info.out_signal_tile != INVALID_TILE) {
|
if (info.out_signal_tile != INVALID_TILE) {
|
||||||
aspect = std::min<uint8>(GetSignalAspectGeneric(info.out_signal_tile, info.out_signal_trackdir, true) + 1, GetMaximumSignalAspect());
|
/* Combined normal/shunt signals should never be encountered here as they are PBS-only and so will never be green if not reserved */
|
||||||
|
aspect = IncrementAspectForSignal(GetSignalAspectGeneric(info.out_signal_tile, info.out_signal_trackdir, true), false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
aspect = 0;
|
aspect = 0;
|
||||||
|
@@ -204,9 +204,16 @@ inline void AdjustSignalAspectIfNonIncStyle(TileIndex tile, Track track, uint8 &
|
|||||||
if (aspect > 0 && (_signal_style_masks.non_aspect_inc != 0 || _signal_style_masks.combined_normal_shunt != 0)) AdjustSignalAspectIfNonIncStyleIntl(tile, track, aspect);
|
if (aspect > 0 && (_signal_style_masks.non_aspect_inc != 0 || _signal_style_masks.combined_normal_shunt != 0)) AdjustSignalAspectIfNonIncStyleIntl(tile, track, aspect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline uint8 IncrementAspectForSignal(uint8 aspect, bool combined_normal_mode)
|
||||||
|
{
|
||||||
|
aspect = std::min<uint8>(aspect + 1, GetMaximumSignalAspect());
|
||||||
|
if (combined_normal_mode) aspect = std::min<uint8>(aspect + 1, 7);
|
||||||
|
return aspect;
|
||||||
|
}
|
||||||
|
|
||||||
inline uint8 GetForwardAspectFollowingTrackAndIncrement(TileIndex tile, Trackdir trackdir, bool combined_normal_mode = false)
|
inline uint8 GetForwardAspectFollowingTrackAndIncrement(TileIndex tile, Trackdir trackdir, bool combined_normal_mode = false)
|
||||||
{
|
{
|
||||||
return std::min<uint8>(GetForwardAspectFollowingTrack(tile, trackdir) + (combined_normal_mode ? 2 : 1), GetMaximumSignalAspect());
|
return IncrementAspectForSignal(GetForwardAspectFollowingTrack(tile, trackdir), combined_normal_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateSignalReserveThroughBit(TileIndex tile, Track track, bool update_signal);
|
void UpdateSignalReserveThroughBit(TileIndex tile, Track track, bool update_signal);
|
||||||
|
Reference in New Issue
Block a user