road_cmd.c
changeset 3068 c4ca7cecce7c
parent 3067 49f7be955db4
child 3069 9a1fd047b595
equal deleted inserted replaced
3067:49f7be955db4 3068:c4ca7cecce7c
    25 void RoadVehEnterDepot(Vehicle *v);
    25 void RoadVehEnterDepot(Vehicle *v);
    26 
    26 
    27 
    27 
    28 static bool HasTileRoadAt(TileIndex tile, int i)
    28 static bool HasTileRoadAt(TileIndex tile, int i)
    29 {
    29 {
    30 	int mask;
       
    31 	byte b;
    30 	byte b;
    32 
    31 
    33 	switch (GetTileType(tile)) {
    32 	switch (GetTileType(tile)) {
    34 	case MP_STREET:
    33 		case MP_STREET:
    35 		b = _m[tile].m5;
    34 			b = _m[tile].m5;
    36 
    35 
    37 		switch (GB(b, 4, 4)) {
    36 			switch (GB(b, 4, 4)) {
    38 			case 0: break; // normal road
    37 				case 0: break; // normal road
    39 			case 1: b = (b & 8 ? 5 : 10); break; // level crossing
    38 				case 1: b = (b & 8 ? 5 : 10); break; // level crossing
    40 			case 2: return (~b & 3) == i; // depot
    39 				case 2: return (~b & 3) == i; // depot
    41 			default: return false;
    40 				default: return false;
    42 		}
    41 			}
    43 		break;
    42 			break;
    44 
    43 
    45 	case MP_STATION:
    44 		case MP_STATION:
    46 		return
    45 			return
    47 			IS_BYTE_INSIDE(_m[tile].m5, 0x43, 0x43 + 8) &&
    46 				IS_BYTE_INSIDE(_m[tile].m5, 0x43, 0x43 + 8) &&
    48 			(~(_m[tile].m5 - 0x43) & 3) == i;
    47 				(~(_m[tile].m5 - 0x43) & 3) == i;
    49 
    48 
    50 	case MP_TUNNELBRIDGE:
    49 		case MP_TUNNELBRIDGE:
    51 		// bail out, if not a bridge middle part with road underneath
    50 			// bail out, if not a bridge middle part with road underneath
    52 		if ((_m[tile].m5 & 0xF8) != 0xE8) return false;
    51 			if ((_m[tile].m5 & 0xF8) != 0xE8) return false;
    53 		// road direction perpendicular to bridge
    52 			// road direction perpendicular to bridge
    54 		b = (_m[tile].m5 & 0x01) ? 10 : 5;
    53 			b = (_m[tile].m5 & 0x01) ? 10 : 5;
    55 
    54 
    56 	default:
    55 		default:
    57 		return false;
    56 			return false;
    58 	}
    57 	}
    59 
    58 
    60 	return HASBIT(b, i);
    59 	return HASBIT(b, i);
    61 }
    60 }
    62 
    61