Fix wrong signal aspects when track built up to rear of tunnel/bridge entrance

pull/362/head
Jonathan G Rennison 2 years ago
parent b9db85048f
commit d56f7e7060

@ -575,12 +575,14 @@ uint8 GetForwardAspectFollowingTrack(TileIndex tile, Trackdir trackdir)
Owner owner = GetTileOwner(tile);
DiagDirection exitdir = TrackdirToExitdir(trackdir);
DiagDirection enterdir = ReverseDiagDir(exitdir);
bool wormhole = false;
if (IsTileType(tile, MP_TUNNELBRIDGE) && TrackdirEntersTunnelBridge(tile, trackdir)) {
TileIndex other = GetOtherTunnelBridgeEnd(tile);
if (IsTunnelBridgeWithSignalSimulation(tile)) {
return GetSignalledTunnelBridgeEntranceForwardAspect(tile, other);
}
tile = other;
wormhole = true;
} else {
tile += TileOffsByDiagDir(exitdir);
}
@ -646,6 +648,7 @@ uint8 GetForwardAspectFollowingTrack(TileIndex tile, Trackdir trackdir)
case MP_TUNNELBRIDGE: {
if (!IsOneSignalBlock(owner, GetTileOwner(tile))) return 0;
if (GetTunnelBridgeTransportType(tile) != TRANSPORT_RAIL) return 0;
if ((enterdir == GetTunnelBridgeDirection(tile)) != wormhole) return 0;
TrackBits tracks = GetTunnelBridgeTrackBits(tile); // trackbits of tile
TrackBits tracks_masked = (TrackBits)(tracks & _enterdir_to_trackbits[enterdir]); // only incidating trackbits
@ -670,10 +673,12 @@ uint8 GetForwardAspectFollowingTrack(TileIndex tile, Trackdir trackdir)
tile = GetOtherTunnelBridgeEnd(tile);
enterdir = GetTunnelBridgeDirection(tile);
exitdir = ReverseDiagDir(enterdir);
wormhole = true;
} else {
exitdir = TrackdirToExitdir(trackdir);
enterdir = ReverseDiagDir(exitdir);
tile += TileOffsByDiagDir(exitdir);
wormhole = false;
}
break;
}
@ -1262,11 +1267,13 @@ void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect)
Owner owner = GetTileOwner(tile);
DiagDirection exitdir = TrackdirToExitdir(ReverseTrackdir(trackdir));
DiagDirection enterdir = ReverseDiagDir(exitdir);
bool wormhole = false;
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);
tile = other;
wormhole = true;
} else {
tile += TileOffsByDiagDir(exitdir);
}
@ -1337,6 +1344,7 @@ void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect)
case MP_TUNNELBRIDGE: {
if (!IsOneSignalBlock(owner, GetTileOwner(tile))) return;
if (GetTunnelBridgeTransportType(tile) != TRANSPORT_RAIL) return;
if ((enterdir == GetTunnelBridgeDirection(tile)) != wormhole) return;
TrackBits tracks = GetTunnelBridgeTrackBits(tile); // trackbits of tile
TrackBits tracks_masked = (TrackBits)(tracks & _enterdir_to_trackbits[enterdir]); // only incidating trackbits
@ -1367,6 +1375,7 @@ void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect)
enterdir = GetTunnelBridgeDirection(other);
exitdir = ReverseDiagDir(enterdir);
tile = other;
wormhole = true;
} else {
if (TrackdirEntersTunnelBridge(tile, ReverseTrackdir(trackdir))) {
if (IsTunnelBridgeWithSignalSimulation(tile)) {
@ -1381,6 +1390,7 @@ void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect)
exitdir = TrackdirToExitdir(trackdir);
enterdir = ReverseDiagDir(exitdir);
tile += TileOffsByDiagDir(exitdir);
wormhole = false;
}
break;
}

Loading…
Cancel
Save