54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* $Id$ */
 | |
| 
 | |
| #include "stdafx.h"
 | |
| #include "openttd.h"
 | |
| #include "functions.h"
 | |
| #include "road_map.h"
 | |
| #include "station.h"
 | |
| #include "tunnel_map.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(GetRoadDepotDirection(tile));
 | |
| 			}
 | |
| 
 | |
| 		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 (GetTunnelTransportType(tile) != TRANSPORT_ROAD) return 0;
 | |
| 				return DiagDirToRoadBits(ReverseDiagDir(GetTunnelDirection(tile)));
 | |
| 			}
 | |
| 
 | |
| 		default: return 0;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| TrackBits GetAnyRoadTrackBits(TileIndex tile)
 | |
| {
 | |
| 	uint32 r = GetTileTrackStatus(tile, TRANSPORT_ROAD);
 | |
| 	return (byte)(r | (r >> 8));
 | |
| }
 | 
