summaryrefslogtreecommitdiff
path: root/road_map.c
diff options
context:
space:
mode:
authortron <tron@openttd.org>2006-03-05 12:22:20 +0000
committertron <tron@openttd.org>2006-03-05 12:22:20 +0000
commitf007ad282c60cc1b2529b44c3e0b4c1bdab3d685 (patch)
treec60df54ca959b2f8cbb49252a82727e5496e5f5f /road_map.c
parentebec656110fc5f868421f76a6acbc800c5dc77c6 (diff)
downloadopenttd-f007ad282c60cc1b2529b44c3e0b4c1bdab3d685.tar.xz
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
Diffstat (limited to 'road_map.c')
-rw-r--r--road_map.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/road_map.c b/road_map.c
new file mode 100644
index 000000000..ca35d8358
--- /dev/null
+++ b/road_map.c
@@ -0,0 +1,44 @@
+/* $Id$ */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "road_map.h"
+#include "station.h"
+
+
+RoadBits GetAnyRoadBits(TileIndex tile)
+{
+ switch (GetTileType(tile)) {
+ case MP_STREET:
+ switch (GetRoadType(tile)) {
+ default:
+ case ROAD_NORMAL: return GetRoadBits(tile);
+ case ROAD_CROSSING: return GetCrossingRoadBits(tile);
+ case ROAD_DEPOT: return DiagDirToRoadBits(GB(_m[tile].m5, 0, 2));
+ }
+
+ case MP_STATION:
+ if (!IsRoadStationTile(tile)) return 0;
+ return DiagDirToRoadBits(GetRoadStationDir(tile));
+
+ case MP_TUNNELBRIDGE:
+ if (_m[tile].m5 & 0x80) {
+ // bridge
+ if (_m[tile].m5 & 0x40) {
+ // middle part
+ if ((_m[tile].m5 & 0x38) != 0x28) return 0; // no road under bridge
+ return _m[tile].m5 & 1 ? ROAD_X : ROAD_Y;
+ } else {
+ // ending
+ if (GB(_m[tile].m5, 1, 2) != TRANSPORT_ROAD) return 0; // not a road bridge
+ return _m[tile].m5 & 1 ? ROAD_Y : ROAD_X;
+ }
+ } else {
+ // tunnel
+ if (GB(_m[tile].m5, 2, 2) != TRANSPORT_ROAD) return 0; // not a road tunnel
+ return DiagDirToRoadBits(ReverseDiagDir(GB(_m[tile].m5, 0, 2)));
+ }
+
+ default: return 0;
+ }
+}