diff options
author | tron <tron@openttd.org> | 2006-03-05 12:22:20 +0000 |
---|---|---|
committer | tron <tron@openttd.org> | 2006-03-05 12:22:20 +0000 |
commit | f007ad282c60cc1b2529b44c3e0b4c1bdab3d685 (patch) | |
tree | c60df54ca959b2f8cbb49252a82727e5496e5f5f /road_map.c | |
parent | ebec656110fc5f868421f76a6acbc800c5dc77c6 (diff) | |
download | openttd-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.c | 44 |
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; + } +} |