Fix wrong signal aspects when track built up to rear of tunnel/bridge entrance
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user