Avoid unnecessary viewport redrawing when (un)reserving signalled bridges

This commit is contained in:
Jonathan G Rennison
2021-01-05 01:02:45 +00:00
parent 6965a339c4
commit 65d5d13a08
2 changed files with 10 additions and 6 deletions

View File

@@ -104,8 +104,8 @@ bool TryReserveRailTrack(TileIndex tile, Track t, bool trigger_stations)
if (_settings_client.gui.show_track_reservation) { if (_settings_client.gui.show_track_reservation) {
/* show the reserved rail if needed */ /* show the reserved rail if needed */
if (IsBridgeTile(tile)) { if (IsTileType(tile, MP_TUNNELBRIDGE)) {
MarkBridgeDirty(tile, VMDF_NOT_MAP_MODE); MarkBridgeOrTunnelDirtyOnReservationChange(tile, VMDF_NOT_MAP_MODE);
} else { } else {
MarkTileGroundDirtyByTile(tile, VMDF_NOT_MAP_MODE); MarkTileGroundDirtyByTile(tile, VMDF_NOT_MAP_MODE);
} }
@@ -199,8 +199,8 @@ void UnreserveRailTrack(TileIndex tile, Track t)
assert_msg_tile(TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_RAIL, 0)) & TrackToTrackBits(t), tile, "track: %u", t); assert_msg_tile(TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_RAIL, 0)) & TrackToTrackBits(t), tile, "track: %u", t);
if (_settings_client.gui.show_track_reservation) { if (_settings_client.gui.show_track_reservation) {
if (IsBridgeTile(tile)) { if (IsTileType(tile, MP_TUNNELBRIDGE)) {
MarkBridgeDirty(tile, VMDF_NOT_MAP_MODE); MarkBridgeOrTunnelDirtyOnReservationChange(tile, VMDF_NOT_MAP_MODE);
} else { } else {
MarkTileGroundDirtyByTile(tile, VMDF_NOT_MAP_MODE); MarkTileGroundDirtyByTile(tile, VMDF_NOT_MAP_MODE);
} }

View File

@@ -119,11 +119,15 @@ void MarkBridgeOrTunnelDirty(TileIndex tile, ViewportMarkDirtyFlags flags)
void MarkBridgeOrTunnelDirtyOnReservationChange(TileIndex tile, ViewportMarkDirtyFlags flags) void MarkBridgeOrTunnelDirtyOnReservationChange(TileIndex tile, ViewportMarkDirtyFlags flags)
{ {
if (IsTunnelBridgeWithSignalSimulation(tile)) { if (IsTunnelBridgeWithSignalSimulation(tile)) {
MarkTileDirtyByTile(tile, flags); if (IsBridge(tile)) {
MarkTileDirtyByTile(tile, flags);
} else {
MarkTileGroundDirtyByTile(tile, flags);
}
} else if (IsBridge(tile)) { } else if (IsBridge(tile)) {
MarkBridgeDirty(tile, flags); MarkBridgeDirty(tile, flags);
} else { } else {
MarkTileDirtyByTile(tile, flags); MarkTileGroundDirtyByTile(tile, flags);
} }
} }