src/tunnel_map.cpp
changeset 5835 e0ff603ae0b7
parent 5726 8f399788f6c9
child 6307 f40e88cff863
child 6719 4cc327ad39d5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tunnel_map.cpp	Wed Jan 10 18:12:09 2007 +0000
@@ -0,0 +1,50 @@
+/* $Id$ */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "tile.h"
+#include "tunnel_map.h"
+
+TileIndex GetOtherTunnelEnd(TileIndex tile)
+{
+	DiagDirection dir = GetTunnelDirection(tile);
+	TileIndexDiff delta = TileOffsByDiagDir(dir);
+	uint z = GetTileZ(tile);
+
+	dir = ReverseDiagDir(dir);
+	do {
+		tile += delta;
+	} while (
+		!IsTunnelTile(tile) ||
+		GetTunnelDirection(tile) != dir ||
+		GetTileZ(tile) != z
+	);
+
+	return tile;
+}
+
+
+static bool IsTunnelInWayDir(TileIndex tile, uint z, DiagDirection dir)
+{
+	TileIndexDiff delta = TileOffsByDiagDir(dir);
+	uint height;
+
+	do {
+		tile -= delta;
+		height = GetTileZ(tile);
+	} while (z < height);
+
+	return
+		z == height &&
+		IsTunnelTile(tile) &&
+		GetTunnelDirection(tile) == dir;
+}
+
+bool IsTunnelInWay(TileIndex tile, uint z)
+{
+	return
+		IsTunnelInWayDir(tile, z, DIAGDIR_NE) ||
+		IsTunnelInWayDir(tile, z, DIAGDIR_SE) ||
+		IsTunnelInWayDir(tile, z, DIAGDIR_SW) ||
+		IsTunnelInWayDir(tile, z, DIAGDIR_NW);
+}