Fix signal aspect re-calculation with combined normal/shunt

pull/407/head
Jonathan G Rennison 2 years ago
parent d48912aa15
commit e747f96c78

@ -709,9 +709,14 @@ static uint8 GetForwardAspect(const SigInfo &info, TileIndex tile, Trackdir trac
}
}
static uint8 GetForwardAspectAndIncrement(const SigInfo &info, TileIndex tile, Trackdir trackdir)
static uint8 GetForwardAspectAndIncrement(const SigInfo &info, TileIndex tile, Trackdir trackdir, bool combined_normal_mode = false)
{
return std::min<uint8>(GetForwardAspect(info, tile, trackdir) + 1, GetMaximumSignalAspect());
return std::min<uint8>(GetForwardAspect(info, tile, trackdir) + (combined_normal_mode ? 2 : 1), GetMaximumSignalAspect());
}
static inline bool IsRailCombinedNormalShuntSignalStyle(TileIndex tile, Track track)
{
return _signal_style_masks.combined_normal_shunt != 0 && HasBit(_signal_style_masks.combined_normal_shunt, GetSignalStyle(tile, track));
}
/**
@ -780,7 +785,7 @@ static void UpdateSignalsAroundSegment(SigInfo info)
/* don't change signal state if tile is reserved in realistic braking mode */
if ((_settings_game.vehicle.train_braking_model == TBM_REALISTIC && HasBit(GetRailReservationTrackBits(tile), track))) {
if (_extra_aspects > 0 && GetSignalStateByTrackdir(tile, trackdir) == SIGNAL_STATE_GREEN && !IsRailSpecialSignalAspect(tile, track)) {
uint8 aspect = GetForwardAspectAndIncrement(info, tile, trackdir);
uint8 aspect = GetForwardAspectAndIncrement(info, tile, trackdir, IsRailCombinedNormalShuntSignalStyle(tile, TrackdirToTrack(trackdir)));
uint8 old_aspect = GetSignalAspect(tile, track);
if (aspect != old_aspect) {
SetSignalAspect(tile, track, aspect);
@ -874,8 +879,8 @@ static void UpdateSignalsAroundSegment(SigInfo info)
}
while (_tbpset.Get(&tile, &trackdir)) {
uint8 aspect = GetForwardAspectAndIncrement(info, tile, trackdir);
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
uint8 aspect = GetForwardAspectAndIncrement(info, tile, trackdir);
uint8 old_aspect = GetTunnelBridgeExitSignalAspect(tile);
if (aspect != old_aspect) {
SetTunnelBridgeExitSignalAspect(tile, aspect);
@ -883,6 +888,7 @@ static void UpdateSignalsAroundSegment(SigInfo info)
PropagateAspectChange(tile, trackdir, aspect);
}
} else {
uint8 aspect = GetForwardAspectAndIncrement(info, tile, trackdir, IsRailCombinedNormalShuntSignalStyle(tile, TrackdirToTrack(trackdir)));
uint8 old_aspect = GetSignalAspect(tile, track);
Track track = TrackdirToTrack(trackdir);
if (aspect != old_aspect) {
@ -1290,11 +1296,6 @@ static void RefreshBridgeOnExitAspectChange(TileIndex entrance, TileIndex exit)
}
}
static inline bool IsRailCombinedNormalShuntSignalStyle(TileIndex tile, Track track)
{
return _signal_style_masks.combined_normal_shunt != 0 && HasBit(_signal_style_masks.combined_normal_shunt, GetSignalStyle(tile, track));
}
void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect)
{
AdjustSignalAspectIfNonIncStyle(tile, TrackdirToTrack(trackdir), aspect);

Loading…
Cancel
Save