From fa89036a273806fc2526929510ce1c12d556796e Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 25 Jun 2022 23:45:50 +0100 Subject: [PATCH] Add function to get maximum signal aspect --- src/signal.cpp | 22 +++++++++++----------- src/signal_func.h | 7 ++++++- src/tunnelbridge_cmd.cpp | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/signal.cpp b/src/signal.cpp index 80f22e3964..5fb36da98d 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -560,20 +560,20 @@ static uint8 GetSignalledTunnelBridgeEntranceForwardAspect(TileIndex tile, TileI if (GetBridgeEntranceSimulatedSignalState(tile, i) == SIGNAL_STATE_GREEN) { aspect++; } else { - return std::min(aspect, _extra_aspects + 1); + return std::min(aspect, GetMaximumSignalAspect()); } } if (GetTunnelBridgeExitSignalState(tile_exit) == SIGNAL_STATE_GREEN) aspect += GetTunnelBridgeExitSignalAspect(tile_exit); - return std::min(aspect, _extra_aspects + 1); + return std::min(aspect, GetMaximumSignalAspect()); } else { int free_tiles = GetAvailableFreeTilesInSignalledTunnelBridge(tile, tile_exit, tile); if (free_tiles == INT_MAX) { uint aspect = signal_count; if (GetTunnelBridgeExitSignalState(tile_exit) == SIGNAL_STATE_GREEN) aspect += GetTunnelBridgeExitSignalAspect(tile_exit); - return std::min(aspect, _extra_aspects + 1); + return std::min(aspect, GetMaximumSignalAspect()); } else { if (free_tiles < (int)spacing) return 0; - return std::min((free_tiles / spacing) - 1, _extra_aspects + 1); + return std::min((free_tiles / spacing) - 1, GetMaximumSignalAspect()); } } } @@ -710,7 +710,7 @@ static uint8 GetForwardAspect(const SigInfo &info, TileIndex tile, Trackdir trac static uint8 GetForwardAspectAndIncrement(const SigInfo &info, TileIndex tile, Trackdir trackdir) { - return std::min(GetForwardAspect(info, tile, trackdir) + 1, _extra_aspects + 1); + return std::min(GetForwardAspect(info, tile, trackdir) + 1, GetMaximumSignalAspect()); } /** @@ -838,7 +838,7 @@ static void UpdateSignalsAroundSegment(SigInfo info) if (newstate == SIGNAL_STATE_GREEN) { aspect = 1; if (info.out_signal_tile != INVALID_TILE) { - aspect = std::min(GetSignalAspectGeneric(info.out_signal_tile, info.out_signal_trackdir, true) + 1, _extra_aspects + 1); + aspect = std::min(GetSignalAspectGeneric(info.out_signal_tile, info.out_signal_trackdir, true) + 1, GetMaximumSignalAspect()); } } else { aspect = 0; @@ -1286,7 +1286,7 @@ void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect) { AdjustSignalAspectIfNonIncStyle(tile, TrackdirToTrack(trackdir), aspect); - aspect = std::min(aspect + 1, _extra_aspects + 1); + aspect = std::min(aspect + 1, GetMaximumSignalAspect()); Owner owner = GetTileOwner(tile); DiagDirection exitdir = TrackdirToExitdir(ReverseTrackdir(trackdir)); DiagDirection enterdir = ReverseDiagDir(exitdir); @@ -1294,7 +1294,7 @@ void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect) if (IsTileType(tile, MP_TUNNELBRIDGE) && TrackdirExitsTunnelBridge(tile, trackdir)) { TileIndex other = GetOtherTunnelBridgeEnd(tile); if (IsBridge(tile)) RefreshBridgeOnExitAspectChange(other, tile); - aspect = std::min(GetSignalledTunnelBridgeEntranceForwardAspect(other, tile) + 1, _extra_aspects + 1); + aspect = std::min(GetSignalledTunnelBridgeEntranceForwardAspect(other, tile) + 1, GetMaximumSignalAspect()); tile = other; wormhole = true; } else { @@ -1334,7 +1334,7 @@ void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect) SetSignalAspect(tile, track, aspect); MarkSingleSignalDirty(tile, reversedir); AdjustSignalAspectIfNonIncStyle(tile, TrackdirToTrack(trackdir), aspect); - aspect = std::min(aspect + 1, _extra_aspects + 1); + aspect = std::min(aspect + 1, GetMaximumSignalAspect()); } else if (IsOnewaySignal(tile, track)) { return; // one-way signal facing the wrong way } @@ -1394,7 +1394,7 @@ void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect) SetTunnelBridgeExitSignalAspect(tile, aspect); MarkTunnelBridgeSignalDirty(tile, true); if (IsBridge(tile)) RefreshBridgeOnExitAspectChange(other, tile); - aspect = std::min(GetSignalledTunnelBridgeEntranceForwardAspect(other, tile) + 1, _extra_aspects + 1); + aspect = std::min(GetSignalledTunnelBridgeEntranceForwardAspect(other, tile) + 1, GetMaximumSignalAspect()); } enterdir = GetTunnelBridgeDirection(other); exitdir = ReverseDiagDir(enterdir); @@ -1408,7 +1408,7 @@ void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect) if (GetTunnelBridgeEntranceSignalAspect(tile) == aspect) return; SetTunnelBridgeEntranceSignalAspect(tile, aspect); MarkTunnelBridgeSignalDirty(tile, false); - aspect = std::min(aspect + 1, _extra_aspects + 1); + aspect = std::min(aspect + 1, GetMaximumSignalAspect()); } } exitdir = TrackdirToExitdir(trackdir); diff --git a/src/signal_func.h b/src/signal_func.h index e70cadea19..8ddb8a76f4 100644 --- a/src/signal_func.h +++ b/src/signal_func.h @@ -22,6 +22,11 @@ extern uint8 _extra_aspects; extern uint64 _aspect_cfg_hash; +static inline uint8 GetMaximumSignalAspect() +{ + return _extra_aspects + 1; +} + struct SignalStyleMasks { uint16 non_aspect_inc = 0; uint16 next_only = 0; @@ -197,7 +202,7 @@ inline void AdjustSignalAspectIfNonIncStyle(TileIndex tile, Track track, uint8 & inline uint8 GetForwardAspectFollowingTrackAndIncrement(TileIndex tile, Trackdir trackdir) { - return std::min(GetForwardAspectFollowingTrack(tile, trackdir) + 1, _extra_aspects + 1); + return std::min(GetForwardAspectFollowingTrack(tile, trackdir) + 1, GetMaximumSignalAspect()); } void UpdateSignalReserveThroughBit(TileIndex tile, Track track, bool update_signal); diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 75095f60b8..b88fb45308 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -1888,7 +1888,7 @@ static void DrawBridgeSignalOnMiddlePart(const TileInfo *ti, TileIndex bridge_st m2_position++; if (GetBridgeEntranceSimulatedSignalState(bridge_start_tile, m2_position) != SIGNAL_STATE_GREEN) break; aspect++; - if (aspect >= _extra_aspects + 1) break; + if (aspect >= GetMaximumSignalAspect()) break; } } }