Fix crash with wrong-way running on multi-aspect signalled tunnel/bridge

When using the ignore signals buttons and updating middle signal states
This commit is contained in:
Jonathan G Rennison
2021-11-11 18:06:35 +00:00
parent 5ac6ea8cd1
commit 2b1993ee4d

View File

@@ -5096,6 +5096,8 @@ static bool CheckTrainStayInWormHole(Train *t, TileIndex tile)
static void HandleSignalBehindTrain(Train *v, int signal_number) static void HandleSignalBehindTrain(Train *v, int signal_number)
{ {
if (!IsTunnelBridgeSignalSimulationEntrance(v->tile)) return;
const uint simulated_wormhole_signals = GetTunnelBridgeSignalSimulationSpacing(v->tile); const uint simulated_wormhole_signals = GetTunnelBridgeSignalSimulationSpacing(v->tile);
TileIndex tile; TileIndex tile;
@@ -5109,7 +5111,7 @@ static void HandleSignalBehindTrain(Train *v, int signal_number)
if (tile == v->tile) { if (tile == v->tile) {
/* Flip signal on ramp. */ /* Flip signal on ramp. */
if (IsTunnelBridgeSignalSimulationEntrance(tile)) SetTunnelBridgeEntranceSignalGreen(tile); SetTunnelBridgeEntranceSignalGreen(tile);
} else if (IsBridge(v->tile) && signal_number >= 0) { } else if (IsBridge(v->tile) && signal_number >= 0) {
SetBridgeEntranceSimulatedSignalState(v->tile, signal_number, SIGNAL_STATE_GREEN); SetBridgeEntranceSimulatedSignalState(v->tile, signal_number, SIGNAL_STATE_GREEN);
MarkSingleBridgeSignalDirty(tile, v->tile); MarkSingleBridgeSignalDirty(tile, v->tile);
@@ -5517,7 +5519,7 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
return false; return false;
} }
/* flip signal in front to red on bridges*/ /* flip signal in front to red on bridges*/
if (distance == 0 && IsBridge(v->tile)) { if (distance == 0 && IsBridge(v->tile) && IsTunnelBridgeSignalSimulationEntrance(v->tile)) {
SetBridgeEntranceSimulatedSignalState(v->tile, v->tunnel_bridge_signal_num, SIGNAL_STATE_RED); SetBridgeEntranceSimulatedSignalState(v->tile, v->tunnel_bridge_signal_num, SIGNAL_STATE_RED);
MarkSingleBridgeSignalDirty(gp.new_tile, v->tile); MarkSingleBridgeSignalDirty(gp.new_tile, v->tile);
} }