@@ -1036,6 +1036,7 @@ public ArrowDirection GetDirection(ushort otherSegmentId, bool startNode) {
10361036 /// </summary>
10371037 /// <param name="startNode"></param>
10381038 /// <returns></returns>
1039+ [ Obsolete ]
10391040 public bool AreHighwayRulesEnabled ( bool startNode ) {
10401041 if ( ! Options . highwayRules )
10411042 return false ;
@@ -1086,9 +1087,14 @@ internal static bool calculateIsOutgoingOneWay(ushort segmentId, ushort nodeId)
10861087 var laneId = instance . m_segments . m_buffer [ segmentId ] . m_lanes ;
10871088 var laneIndex = 0 ;
10881089 while ( laneIndex < info . m_lanes . Length && laneId != 0u ) {
1089- if ( info . m_lanes [ laneIndex ] . m_laneType != NetInfo . LaneType . Pedestrian &&
1090- ( ( info . m_lanes [ laneIndex ] . m_finalDirection & dir ) != NetInfo . Direction . None ) ) {
1091- return false ;
1090+ bool validLane = ( info . m_lanes [ laneIndex ] . m_laneType & ( NetInfo . LaneType . Vehicle | NetInfo . LaneType . TransportVehicle ) ) != NetInfo . LaneType . None &&
1091+ ( info . m_lanes [ laneIndex ] . m_vehicleType & ( VehicleInfo . VehicleType . Car | VehicleInfo . VehicleType . Train | VehicleInfo . VehicleType . Tram | VehicleInfo . VehicleType . Metro | VehicleInfo . VehicleType . Monorail ) ) != VehicleInfo . VehicleType . None ;
1092+ // TODO the lane types and vehicle types should be specified to make it clear which lanes we need to check
1093+
1094+ if ( validLane ) {
1095+ if ( ( info . m_lanes [ laneIndex ] . m_finalDirection & dir ) != NetInfo . Direction . None ) {
1096+ return false ;
1097+ }
10921098 }
10931099
10941100 laneId = instance . m_lanes . m_buffer [ laneId ] . m_nextLane ;
@@ -1116,18 +1122,22 @@ private static bool calculateIsOneWay(ushort segmentId) {
11161122 var laneId = instance . m_segments . m_buffer [ segmentId ] . m_lanes ;
11171123 var laneIndex = 0 ;
11181124 while ( laneIndex < info . m_lanes . Length && laneId != 0u ) {
1119- if ( info . m_lanes [ laneIndex ] . m_laneType != NetInfo . LaneType . Pedestrian &&
1120- ( info . m_lanes [ laneIndex ] . m_direction & NetInfo . Direction . Forward ) != NetInfo . Direction . None ) {
1121- hasForward = true ;
1122- }
1125+ bool validLane = ( info . m_lanes [ laneIndex ] . m_laneType & ( NetInfo . LaneType . Vehicle | NetInfo . LaneType . TransportVehicle ) ) != NetInfo . LaneType . None &&
1126+ ( info . m_lanes [ laneIndex ] . m_vehicleType & ( VehicleInfo . VehicleType . Car | VehicleInfo . VehicleType . Train | VehicleInfo . VehicleType . Tram | VehicleInfo . VehicleType . Metro | VehicleInfo . VehicleType . Monorail ) ) != VehicleInfo . VehicleType . None ;
1127+ // TODO the lane types and vehicle types should be specified to make it clear which lanes we need to check
11231128
1124- if ( info . m_lanes [ laneIndex ] . m_laneType != NetInfo . LaneType . Pedestrian &&
1125- ( info . m_lanes [ laneIndex ] . m_direction & NetInfo . Direction . Backward ) != NetInfo . Direction . None ) {
1126- hasBackward = true ;
1127- }
1129+ if ( validLane ) {
1130+ if ( ( info . m_lanes [ laneIndex ] . m_direction & NetInfo . Direction . Forward ) != NetInfo . Direction . None ) {
1131+ hasForward = true ;
1132+ }
1133+
1134+ if ( ( info . m_lanes [ laneIndex ] . m_direction & NetInfo . Direction . Backward ) != NetInfo . Direction . None ) {
1135+ hasBackward = true ;
1136+ }
11281137
1129- if ( hasForward && hasBackward ) {
1130- return false ;
1138+ if ( hasForward && hasBackward ) {
1139+ return false ;
1140+ }
11311141 }
11321142
11331143 laneId = instance . m_lanes . m_buffer [ ( int ) ( ( UIntPtr ) laneId ) ] . m_nextLane ;
@@ -1192,19 +1202,22 @@ internal static void calculateOneWayAtNode(ushort segmentId, ushort nodeId, out
11921202 var laneId = instance . m_segments . m_buffer [ segmentId ] . m_lanes ;
11931203 var laneIndex = 0 ;
11941204 while ( laneIndex < info . m_lanes . Length && laneId != 0u ) {
1195- if ( info . m_lanes [ laneIndex ] . m_laneType != NetInfo . LaneType . Pedestrian &&
1196- ( info . m_lanes [ laneIndex ] . m_finalDirection & dir2 ) != NetInfo . Direction . None ) {
1197- isOutgoingOneWay = false ;
1198- }
1205+ bool validLane = ( info . m_lanes [ laneIndex ] . m_laneType & ( NetInfo . LaneType . Vehicle | NetInfo . LaneType . TransportVehicle ) ) != NetInfo . LaneType . None &&
1206+ ( info . m_lanes [ laneIndex ] . m_vehicleType & ( VehicleInfo . VehicleType . Car | VehicleInfo . VehicleType . Train | VehicleInfo . VehicleType . Tram | VehicleInfo . VehicleType . Metro | VehicleInfo . VehicleType . Monorail ) ) != VehicleInfo . VehicleType . None ;
1207+ // TODO the lane types and vehicle types should be specified to make it clear which lanes we need to check
11991208
1200- if ( info . m_lanes [ laneIndex ] . m_laneType != NetInfo . LaneType . Pedestrian &&
1201- ( info . m_lanes [ laneIndex ] . m_direction & NetInfo . Direction . Forward ) != NetInfo . Direction . None ) {
1202- hasForward = true ;
1203- }
1209+ if ( validLane ) {
1210+ if ( ( info . m_lanes [ laneIndex ] . m_finalDirection & dir2 ) != NetInfo . Direction . None ) {
1211+ isOutgoingOneWay = false ;
1212+ }
12041213
1205- if ( info . m_lanes [ laneIndex ] . m_laneType != NetInfo . LaneType . Pedestrian &&
1206- ( info . m_lanes [ laneIndex ] . m_direction & NetInfo . Direction . Backward ) != NetInfo . Direction . None ) {
1207- hasBackward = true ;
1214+ if ( ( info . m_lanes [ laneIndex ] . m_direction & NetInfo . Direction . Forward ) != NetInfo . Direction . None ) {
1215+ hasForward = true ;
1216+ }
1217+
1218+ if ( ( info . m_lanes [ laneIndex ] . m_direction & NetInfo . Direction . Backward ) != NetInfo . Direction . None ) {
1219+ hasBackward = true ;
1220+ }
12081221 }
12091222
12101223 laneId = instance . m_lanes . m_buffer [ laneId ] . m_nextLane ;
0 commit comments