diff --git a/src/pbs.cpp b/src/pbs.cpp index afe27207b3..76a85d935e 100644 --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -106,7 +106,7 @@ bool TryReserveRailTrack(TileIndex tile, Track t, bool trigger_stations) if (IsBridgeTile(tile)) { MarkBridgeDirty(tile, ZOOM_LVL_DRAW_MAP); } else { - MarkTileDirtyByTile(tile, ZOOM_LVL_DRAW_MAP); + MarkTileGroundDirtyByTile(tile, ZOOM_LVL_DRAW_MAP); } } @@ -155,7 +155,7 @@ bool TryReserveRailTrack(TileIndex tile, Track t, bool trigger_stations) if (GetTunnelBridgeTransportType(tile) == TRANSPORT_RAIL) { if (IsTunnel(tile) && !HasTunnelReservation(tile)) { SetTunnelReservation(tile, true); - MarkTileDirtyByTile(tile, ZOOM_LVL_DRAW_MAP); + MarkTileGroundDirtyByTile(tile, ZOOM_LVL_DRAW_MAP); return true; } if (IsBridge(tile)) { @@ -200,7 +200,7 @@ void UnreserveRailTrack(TileIndex tile, Track t) if (IsBridgeTile(tile)) { MarkBridgeDirty(tile, ZOOM_LVL_DRAW_MAP); } else { - MarkTileDirtyByTile(tile, ZOOM_LVL_DRAW_MAP); + MarkTileGroundDirtyByTile(tile, ZOOM_LVL_DRAW_MAP); } } diff --git a/src/viewport.cpp b/src/viewport.cpp index 1f40ff8e71..2d1e4c1d89 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -3358,6 +3358,15 @@ void MarkTileDirtyByTile(TileIndex tile, const ZoomLevel mark_dirty_if_zoomlevel ); } +void MarkTileGroundDirtyByTile(TileIndex tile, const ZoomLevel mark_dirty_if_zoomlevel_is_below) +{ + int x = TileX(tile) * TILE_SIZE; + int y = TileY(tile) * TILE_SIZE; + Point top = RemapCoords(x, y, GetTileMaxPixelZ(tile)); + Point bot = RemapCoords(x + TILE_SIZE, y + TILE_SIZE, GetTilePixelZ(tile)); + MarkAllViewportsDirty(top.x - TILE_PIXELS * ZOOM_LVL_BASE, top.y - TILE_HEIGHT * ZOOM_LVL_BASE, top.x + TILE_PIXELS * ZOOM_LVL_BASE, bot.y); +} + void MarkTileLineDirty(const TileIndex from_tile, const TileIndex to_tile) { assert(from_tile != INVALID_TILE); diff --git a/src/viewport_func.h b/src/viewport_func.h index 51b7c4858c..cf4e781583 100644 --- a/src/viewport_func.h +++ b/src/viewport_func.h @@ -104,6 +104,8 @@ static inline void MarkTileDirtyByTile(TileIndex tile, const ZoomLevel mark_dirt MarkTileDirtyByTile(tile, mark_dirty_if_zoomlevel_is_below, bridge_level_offset, TileHeight(tile)); } +void MarkTileGroundDirtyByTile(TileIndex tile, const ZoomLevel mark_dirty_if_zoomlevel_is_below); + ViewportMapType ChangeRenderMode(const ViewPort *vp, bool down); Point GetViewportStationMiddle(const ViewPort *vp, const Station *st);