Fix train crash on bridge/tunnel with signals leaving red signals.
Update signals on far end of bridge/tunnel. If clearing the crash results in a clear bridge/tunnel, set all bridge/tunnel signals green.
This commit is contained in:
@@ -4083,7 +4083,25 @@ static void DeleteLastWagon(Train *v)
|
||||
if (IsLevelCrossingTile(tile)) UpdateLevelCrossing(tile);
|
||||
|
||||
/* Update signals */
|
||||
if (IsTileType(tile, MP_TUNNELBRIDGE) || IsRailDepotTile(tile)) {
|
||||
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
|
||||
UpdateSignalsOnSegment(tile, INVALID_DIAGDIR, owner);
|
||||
if (IsTunnelBridgeWithSignalSimulation(tile)) {
|
||||
TileIndex end = GetOtherTunnelBridgeEnd(tile);
|
||||
UpdateSignalsOnSegment(end, INVALID_DIAGDIR, owner);
|
||||
bool is_entrance = IsTunnelBridgeSignalSimulationEntrance(tile);
|
||||
TileIndex entrance = is_entrance ? tile : end;
|
||||
if (TunnelBridgeIsFree(tile, end, nullptr).Succeeded()) {
|
||||
if (IsBridge(entrance)) {
|
||||
SetAllBridgeEntranceSimulatedSignalsGreen(entrance);
|
||||
MarkBridgeDirty(entrance, ZOOM_LVL_DRAW_MAP);
|
||||
}
|
||||
if (IsTunnelBridgeSignalSimulationEntrance(entrance) && GetTunnelBridgeSignalState(entrance) == SIGNAL_STATE_RED) {
|
||||
SetTunnelBridgeSignalState(entrance, SIGNAL_STATE_GREEN);
|
||||
MarkTileDirtyByTile(entrance);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (IsRailDepotTile(tile)) {
|
||||
UpdateSignalsOnSegment(tile, INVALID_DIAGDIR, owner);
|
||||
} else {
|
||||
SetSignalsOnBothDir(tile, track, owner);
|
||||
|
Reference in New Issue
Block a user