summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2008-02-17 21:27:44 +0000
committersmatz <smatz@openttd.org>2008-02-17 21:27:44 +0000
commitb389425dda8a2a0cfe19a188cb1e0edc4aa72586 (patch)
tree5dc8053aac29a312881ef952893822dae5870eeb
parentf003a257857fa27f24c4db4b9b1a18ca999c529a (diff)
downloadopenttd-b389425dda8a2a0cfe19a188cb1e0edc4aa72586.tar.xz
(svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_)
-rw-r--r--src/road_cmd.cpp10
-rw-r--r--src/tunnelbridge_cmd.cpp6
2 files changed, 16 insertions, 0 deletions
diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp
index 22c978ae3..b6df0d704 100644
--- a/src/road_cmd.cpp
+++ b/src/road_cmd.cpp
@@ -1054,6 +1054,16 @@ static void DrawRoadBits(TileInfo* ti)
/* Return if full detail is disabled, or we are zoomed fully out. */
if (!HasBit(_display_opt, DO_FULL_DETAIL) || _cur_dpi->zoom > ZOOM_LVL_DETAIL) return;
+ /* Do not draw details (street lights, trees) under low bridge */
+ if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile) && (roadside == ROADSIDE_TREES || roadside == ROADSIDE_STREET_LIGHTS)) {
+ uint height = GetBridgeHeight(GetNorthernBridgeEnd(ti->tile));
+ uint minz = GetTileMaxZ(ti->tile) + 2 * TILE_HEIGHT;
+
+ if (roadside == ROADSIDE_TREES) minz += TILE_HEIGHT;
+
+ if (height < minz) return;
+ }
+
/* Draw extra details. */
for (drts = _road_display_table[roadside][road]; drts->image != 0; drts++) {
DrawRoadDetail(drts->image, ti, drts->subcoord_x, drts->subcoord_y, 0x10);
diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp
index d04c32ed6..c838b87b1 100644
--- a/src/tunnelbridge_cmd.cpp
+++ b/src/tunnelbridge_cmd.cpp
@@ -663,10 +663,16 @@ static CommandCost DoClearBridge(TileIndex tile, uint32 flags)
/* read this value before actual removal of bridge */
bool rail = GetTunnelBridgeTransportType(tile) == TRANSPORT_RAIL;
Owner owner = GetTileOwner(tile);
+ uint height = GetBridgeHeight(tile);
DoClearSquare(tile);
DoClearSquare(endtile);
for (TileIndex c = tile + delta; c != endtile; c += delta) {
+ /* do not let trees appear from 'nowhere' after removing bridge */
+ if (IsNormalRoadTile(c) && GetRoadside(c) == ROADSIDE_TREES) {
+ uint minz = GetTileMaxZ(c) + 3 * TILE_HEIGHT;
+ if (height < minz) SetRoadside(c, ROADSIDE_PAVED);
+ }
ClearBridgeMiddle(c);
MarkTileDirtyByTile(c);
}