Reduce screen re-draw area for tunnel/bridge end signal updates

This commit is contained in:
Jonathan G Rennison
2021-08-30 03:09:01 +01:00
parent f6c2a81f72
commit b08cc3cf38
6 changed files with 91 additions and 14 deletions

View File

@@ -720,7 +720,7 @@ static void UpdateSignalsAroundSegment(SigInfo info)
uint8 aspect = GetForwardAspectAndIncrement(info, tile, exit_td);
if (aspect != GetTunnelBridgeExitSignalAspect(tile)) {
SetTunnelBridgeExitSignalAspect(tile, aspect);
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
MarkTunnelBridgeSignalDirty(tile, true);
PropagateAspectChange(tile, exit_td, aspect);
}
}
@@ -748,7 +748,7 @@ static void UpdateSignalsAroundSegment(SigInfo info)
PropagateAspectChange(tile, exit_td, aspect);
}
}
if (refresh) MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
if (refresh) MarkTunnelBridgeSignalDirty(tile, true);
continue;
}
@@ -857,7 +857,7 @@ static void UpdateSignalsAroundSegment(SigInfo info)
uint8 old_aspect = GetTunnelBridgeExitSignalAspect(tile);
if (aspect != old_aspect) {
SetTunnelBridgeExitSignalAspect(tile, aspect);
if (old_aspect != 0) MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
if (old_aspect != 0) MarkTunnelBridgeSignalDirty(tile, true);
PropagateAspectChange(tile, trackdir, aspect);
}
} else {
@@ -1358,7 +1358,7 @@ void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect)
if (!IsTunnelBridgeSignalSimulationExit(tile) || GetTunnelBridgeExitSignalState(tile) != SIGNAL_STATE_GREEN) return;
if (GetTunnelBridgeExitSignalAspect(tile) == aspect) return;
SetTunnelBridgeExitSignalAspect(tile, aspect);
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
MarkTunnelBridgeSignalDirty(tile, true);
if (IsBridge(tile)) RefreshBridgeOnExitAspectChange(other, tile);
aspect = std::min<uint>(GetSignalledTunnelBridgeEntranceForwardAspect(other, tile) + 1, _extra_aspects + 1);
}
@@ -1372,7 +1372,7 @@ void PropagateAspectChange(TileIndex tile, Trackdir trackdir, uint8 aspect)
if (!IsTunnelBridgeSignalSimulationEntrance(tile) || GetTunnelBridgeEntranceSignalState(tile) != SIGNAL_STATE_GREEN) return;
if (GetTunnelBridgeEntranceSignalAspect(tile) == aspect) return;
SetTunnelBridgeEntranceSignalAspect(tile, aspect);
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
MarkTunnelBridgeSignalDirty(tile, false);
aspect = std::min<uint>(aspect + 1, _extra_aspects + 1);
}
}