File diff r8615:80a1f1db1d98 → r8616:656db5986c9e
src/road_cmd.cpp
Show inline comments
 
@@ -1311,20 +1311,22 @@ static void ClickTile_Road(TileIndex til
 
	if (IsRoadDepot(tile)) ShowDepotWindow(tile, VEH_ROAD);
 
}
 

	
 
/* Converts RoadBits to TrackBits */
 
static const byte _road_trackbits[16] = {
 
	0x0, 0x0, 0x0, 0x10, 0x0, 0x2, 0x8, 0x1A, 0x0, 0x4, 0x1, 0x15, 0x20, 0x26, 0x29, 0x3F,
 
};
 

	
 
static uint32 GetTileTrackStatus_Road(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
 
static TrackStatus GetTileTrackStatus_Road(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
 
{
 

	
 
	TrackdirBits trackdirbits = TRACKDIR_BIT_NONE;
 
	TrackdirBits red_signals = TRACKDIR_BIT_NONE; // crossing barred
 
	switch (mode) {
 
		case TRANSPORT_RAIL:
 
			if (!IsLevelCrossing(tile)) return 0;
 
			return GetCrossingRailBits(tile) * 0x101;
 
			if (IsLevelCrossing(tile)) trackdirbits = TrackBitsToTrackdirBits(GetCrossingRailBits(tile));
 
			break;
 

	
 
		case TRANSPORT_ROAD:
 
			if ((GetRoadTypes(tile) & sub_mode) == 0) return 0;
 
			if ((GetRoadTypes(tile) & sub_mode) == 0) break;
 
			switch (GetRoadTileType(tile)) {
 
				case ROAD_TILE_NORMAL: {
 
					const uint drd_to_multiplier[DRD_END] = { 0x101, 0x100, 0x1, 0x0 };
 
@@ -1332,36 +1334,38 @@ static uint32 GetTileTrackStatus_Road(Ti
 
					RoadBits bits = GetRoadBits(tile, rt);
 

	
 
					/* no roadbit at this side of tile, return 0 */
 
					if (side != INVALID_DIAGDIR && (DiagDirToRoadBits(side) & bits) == 0) return 0;
 
					if (side != INVALID_DIAGDIR && (DiagDirToRoadBits(side) & bits) == 0) break;
 

	
 
					uint multiplier = drd_to_multiplier[rt == ROADTYPE_TRAM ? DRD_NONE : GetDisallowedRoadDirections(tile)];
 
					return HasRoadWorks(tile) ? 0 : _road_trackbits[bits] * multiplier;
 
					if (!HasRoadWorks(tile)) trackdirbits = (TrackdirBits)(_road_trackbits[bits] * multiplier);
 
					break;
 
				}
 

	
 
				case ROAD_TILE_CROSSING: {
 
					Axis axis = GetCrossingRoadAxis(tile);
 

	
 
					if (side != INVALID_DIAGDIR && axis != DiagDirToAxis(side)) return 0;
 
					if (side != INVALID_DIAGDIR && axis != DiagDirToAxis(side)) break;
 

	
 
					uint32 r = AxisToTrackBits(axis) * 0x101;
 
					if (IsCrossingBarred(tile)) r *= 0x10001;
 
					return r;
 
					trackdirbits = TrackBitsToTrackdirBits(AxisToTrackBits(axis));
 
					if (IsCrossingBarred(tile)) red_signals = trackdirbits;
 
					break;
 
				}
 

	
 
				default:
 
				case ROAD_TILE_DEPOT: {
 
					DiagDirection dir = GetRoadDepotDirection(tile);
 

	
 
					if (side != INVALID_DIAGDIR && side != dir) return 0;
 
					if (side != INVALID_DIAGDIR && side != dir) break;
 

	
 
					return AxisToTrackBits(DiagDirToAxis(dir)) * 0x101;
 
					trackdirbits = TrackBitsToTrackdirBits(AxisToTrackBits(DiagDirToAxis(dir)));
 
					break;
 
				}
 
			}
 
			break;
 

	
 
		default: break;
 
	}
 
	return 0;
 
	return CombineTrackStatus(trackdirbits, red_signals);
 
}
 

	
 
static const StringID _road_tile_strings[] = {