From 50f1c25ff5baa607a8b670c5bbc2aa2be8e1e5eb Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 30 Aug 2021 01:00:32 +0100 Subject: [PATCH] Fix redrawing of bridge signals more than 2 middle signals need updating On exit signal aspect change, with 5+ aspect signalling --- src/signal.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/signal.cpp b/src/signal.cpp index db3bb993f0..4f6a40dcd3 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -1244,10 +1244,11 @@ static void RefreshBridgeOnExitAspectChange(TileIndex entrance, TileIndex exit) const TileIndexDiffC offset = TileIndexDiffCByDiagDir(GetTunnelBridgeDirection(entrance)); const TileIndexDiff diff = TileDiffXY(offset.x * simulated_wormhole_signals, offset.y * simulated_wormhole_signals); const uint signal_count = bridge_length / simulated_wormhole_signals; - TileIndex tile = entrance; - for (uint i = signal_count; i > 0; i--) { - tile += diff; - if (i <= 2) MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE); + TileIndex tile = entrance + ((int)signal_count * diff); + const uint redraw_count = std::min(_extra_aspects, signal_count); + for (uint i = 0; i < redraw_count; i++) { + MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE); + tile -= diff; } }