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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user