Add function to get maximum signal aspect

pull/403/head
Jonathan G Rennison 2 years ago
parent 89f66236ff
commit fa89036a27

@ -560,20 +560,20 @@ static uint8 GetSignalledTunnelBridgeEntranceForwardAspect(TileIndex tile, TileI
if (GetBridgeEntranceSimulatedSignalState(tile, i) == SIGNAL_STATE_GREEN) {
aspect++;
} else {
return std::min<uint>(aspect, _extra_aspects + 1);
return std::min<uint>(aspect, GetMaximumSignalAspect());
}
}
if (GetTunnelBridgeExitSignalState(tile_exit) == SIGNAL_STATE_GREEN) aspect += GetTunnelBridgeExitSignalAspect(tile_exit);
return std::min<uint>(aspect, _extra_aspects + 1);
return std::min<uint>(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<uint>(aspect, _extra_aspects + 1);
return std::min<uint>(aspect, GetMaximumSignalAspect());
} else {
if (free_tiles < (int)spacing) return 0;
return std::min<uint>((free_tiles / spacing) - 1, _extra_aspects + 1);
return std::min<uint>((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<uint8>(GetForwardAspect(info, tile, trackdir) + 1, _extra_aspects + 1);
return std::min<uint8>(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<uint8>(GetSignalAspectGeneric(info.out_signal_tile, info.out_signal_trackdir, true) + 1, _extra_aspects + 1);
aspect = std::min<uint8>(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<uint8>(aspect + 1, _extra_aspects + 1);
aspect = std::min<uint8>(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<uint>(GetSignalledTunnelBridgeEntranceForwardAspect(other, tile) + 1, _extra_aspects + 1);
aspect = std::min<uint>(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<uint8>(aspect + 1, _extra_aspects + 1);
aspect = std::min<uint8>(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<uint>(GetSignalledTunnelBridgeEntranceForwardAspect(other, tile) + 1, _extra_aspects + 1);
aspect = std::min<uint>(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<uint>(aspect + 1, _extra_aspects + 1);
aspect = std::min<uint>(aspect + 1, GetMaximumSignalAspect());
}
}
exitdir = TrackdirToExitdir(trackdir);

@ -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<uint8>(GetForwardAspectFollowingTrack(tile, trackdir) + 1, _extra_aspects + 1);
return std::min<uint8>(GetForwardAspectFollowingTrack(tile, trackdir) + 1, GetMaximumSignalAspect());
}
void UpdateSignalReserveThroughBit(TileIndex tile, Track track, bool update_signal);

@ -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;
}
}
}

Loading…
Cancel
Save