diff options
Diffstat (limited to 'bridge_map.c')
-rw-r--r-- | bridge_map.c | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/bridge_map.c b/bridge_map.c index cbb955c37..e21c5928c 100644 --- a/bridge_map.c +++ b/bridge_map.c @@ -3,22 +3,25 @@ #include "stdafx.h" #include "openttd.h" #include "bridge_map.h" +#include "variables.h" TileIndex GetBridgeEnd(TileIndex tile, DiagDirection dir) { TileIndexDiff delta = TileOffsByDir(dir); - assert(DiagDirToAxis(dir) == GetBridgeAxis(tile)); - - do { - tile += delta; - } while (!IsBridgeRamp(tile)); + do { tile += delta; } while (IsBridgeAbove(tile) && IsBridgeOfAxis(tile, DiagDirToAxis(dir))); return tile; } +TileIndex GetNorthernBridgeEnd(TileIndex t) +{ + return GetBridgeEnd(t, ReverseDiagDir(AxisToDiagDir(GetBridgeAxis(t)))); +} + + TileIndex GetSouthernBridgeEnd(TileIndex t) { return GetBridgeEnd(t, AxisToDiagDir(GetBridgeAxis(t))); @@ -27,11 +30,25 @@ TileIndex GetSouthernBridgeEnd(TileIndex t) TileIndex GetOtherBridgeEnd(TileIndex tile) { - TileIndexDiff delta = TileOffsByDir(GetBridgeRampDirection(tile)); + assert(IsBridgeTile(tile)); + return GetBridgeEnd(tile, GetBridgeRampDirection(tile)); +} - do { - tile += delta; - } while (!IsBridgeRamp(tile)); +uint GetBridgeHeight(TileIndex tile, Axis a) +{ + uint h, f; + uint tileh = GetTileSlope(tile, &h); - return tile; + f = GetBridgeFoundation(tileh, a); + + if (f) { + if (f < 15) { + h += TILE_HEIGHT; + tileh = SLOPE_FLAT; + } else { + tileh = _inclined_tileh[f - 15]; + } + } + + return h + TILE_HEIGHT; } |