Add function to get maximum signal aspect
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user