From f26e9bf59dd953ab76bf816ba7aad87638c22c21 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 22 Feb 2015 15:05:48 +0000 Subject: (svn r27162) -Fix [FS#6208]: Tile selection was drawn outside of map in some cases. (adf88) --- src/viewport.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/viewport.cpp b/src/viewport.cpp index 01787f07a..ef23f1812 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1142,18 +1142,23 @@ static void ViewportAddLandscape() tile_info.x = tilecoord.x * TILE_SIZE; // FIXME tile_info should use signed integers tile_info.y = tilecoord.y * TILE_SIZE; - if (IsInsideBS(tilecoord.x, 0, MapMaxX()) && IsInsideBS(tilecoord.y, 0, MapMaxY())) { - /* We are inside the map => paint landscape. */ + if (IsInsideBS(tilecoord.x, 0, MapSizeX()) && IsInsideBS(tilecoord.y, 0, MapSizeY())) { + /* This includes the south border at MapMaxX / MapMaxY. When terraforming we still draw tile selections there. */ tile_info.tile = TileXY(tilecoord.x, tilecoord.y); - tile_info.tileh = GetTilePixelSlope(tile_info.tile, &tile_info.z); tile_type = GetTileType(tile_info.tile); } else { - /* We are outside the map => paint black. */ tile_info.tile = INVALID_TILE; - tile_info.tileh = GetTilePixelSlopeOutsideMap(tilecoord.x, tilecoord.y, &tile_info.z); tile_type = MP_VOID; } + if (tile_type != MP_VOID) { + /* We are inside the map => paint landscape. */ + tile_info.tileh = GetTilePixelSlope(tile_info.tile, &tile_info.z); + } else { + /* We are outside the map => paint black. */ + tile_info.tileh = GetTilePixelSlopeOutsideMap(tilecoord.x, tilecoord.y, &tile_info.z); + } + int viewport_y = GetViewportY(tilecoord); if (viewport_y + MAX_TILE_EXTENT_BOTTOM < _vd.dpi.top) { @@ -1195,7 +1200,7 @@ static void ViewportAddLandscape() _vd.last_foundation_child[1] = NULL; _tile_type_procs[tile_type]->draw_tile_proc(&tile_info); - DrawTileSelection(&tile_info); + if (tile_info.tile != INVALID_TILE) DrawTileSelection(&tile_info); } } } -- cgit v1.2.3-54-g00ecf