Fix signal aspect re-calculation with combined normal/shunt
This commit is contained in:
@@ -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 */
|
/* 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 ((_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)) {
|
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);
|
uint8 old_aspect = GetSignalAspect(tile, track);
|
||||||
if (aspect != old_aspect) {
|
if (aspect != old_aspect) {
|
||||||
SetSignalAspect(tile, track, aspect);
|
SetSignalAspect(tile, track, aspect);
|
||||||
@@ -874,8 +879,8 @@ static void UpdateSignalsAroundSegment(SigInfo info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (_tbpset.Get(&tile, &trackdir)) {
|
while (_tbpset.Get(&tile, &trackdir)) {
|
||||||
uint8 aspect = GetForwardAspectAndIncrement(info, tile, trackdir);
|
|
||||||
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
|
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
|
||||||
|
uint8 aspect = GetForwardAspectAndIncrement(info, tile, trackdir);
|
||||||
uint8 old_aspect = GetTunnelBridgeExitSignalAspect(tile);
|
uint8 old_aspect = GetTunnelBridgeExitSignalAspect(tile);
|
||||||
if (aspect != old_aspect) {
|
if (aspect != old_aspect) {
|
||||||
SetTunnelBridgeExitSignalAspect(tile, aspect);
|
SetTunnelBridgeExitSignalAspect(tile, aspect);
|
||||||
@@ -883,6 +888,7 @@ static void UpdateSignalsAroundSegment(SigInfo info)
|
|||||||
PropagateAspectChange(tile, trackdir, aspect);
|
PropagateAspectChange(tile, trackdir, aspect);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
uint8 aspect = GetForwardAspectAndIncrement(info, tile, trackdir, IsRailCombinedNormalShuntSignalStyle(tile, TrackdirToTrack(trackdir)));
|
||||||
uint8 old_aspect = GetSignalAspect(tile, track);
|
uint8 old_aspect = GetSignalAspect(tile, track);
|
||||||
Track track = TrackdirToTrack(trackdir);
|
Track track = TrackdirToTrack(trackdir);
|
||||||
if (aspect != old_aspect) {
|
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)
|
void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect)
|
||||||
{
|
{
|
||||||
AdjustSignalAspectIfNonIncStyle(tile, TrackdirToTrack(trackdir), aspect);
|
AdjustSignalAspectIfNonIncStyle(tile, TrackdirToTrack(trackdir), aspect);
|
||||||
|
Reference in New Issue
Block a user