diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 9d326d0747..fd6c5bd36d 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1090,8 +1090,7 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1, } } } - MarkTileDirtyByTile(tile); - MarkTileDirtyByTile(tile_exit); + MarkBridgeOrTunnelDirty(tile); AddSideToSignalBuffer(tile, INVALID_DIAGDIR, GetTileOwner(tile)); YapfNotifyTrackLayoutChange(tile, track); } @@ -1538,8 +1537,7 @@ CommandCost CmdRemoveSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1 ClrBitTunnelBridgeSignal(end); _m[tile].m2 = 0; _m[end].m2 = 0; - MarkTileDirtyByTile(tile); - MarkTileDirtyByTile(end); + MarkBridgeOrTunnelDirty(tile); AddSideToSignalBuffer(tile, INVALID_DIAGDIR, GetTileOwner(tile)); YapfNotifyTrackLayoutChange(tile, track); return CommandCost(EXPENSES_CONSTRUCTION, cost); diff --git a/src/tunnelbridge.h b/src/tunnelbridge.h index 0a2c2293d5..03de071e9d 100644 --- a/src/tunnelbridge.h +++ b/src/tunnelbridge.h @@ -16,6 +16,7 @@ void MarkBridgeDirty(TileIndex begin, TileIndex end, DiagDirection direction, uint bridge_height); void MarkBridgeDirty(TileIndex tile); +void MarkBridgeOrTunnelDirty(TileIndex tile); /** * Calculates the length of a tunnel or a bridge (without end tiles) diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index f963222f5a..4dec3f80e0 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -80,6 +80,20 @@ void MarkBridgeDirty(TileIndex tile) MarkBridgeDirty(tile, GetOtherTunnelBridgeEnd(tile), GetTunnelBridgeDirection(tile), GetBridgeHeight(tile)); } +/** + * Mark bridge or tunnel tiles dirty. + * @param tile Bridge head or tunnel entrance. + */ +void MarkBridgeOrTunnelDirty(TileIndex tile) +{ + if (IsBridge(tile)) { + MarkBridgeDirty(tile); + } else { + MarkTileDirtyByTile(tile); + MarkTileDirtyByTile(GetOtherTunnelBridgeEnd(tile)); + } +} + /** Reset the data been eventually changed by the grf loaded. */ void ResetBridges() {