public static void setLaneAllowedVehicleTypes(ushort segmentId, uint laneIndex, uint laneId, ExtVehicleType vehicleTypes) { if (segmentId <= 0 || laneId <= 0) { return; } if ((Singleton <NetManager> .instance.m_segments.m_buffer[segmentId].m_flags & (NetSegment.Flags.Created | NetSegment.Flags.Deleted)) != NetSegment.Flags.Created) { return; } if (((NetLane.Flags)Singleton <NetManager> .instance.m_lanes.m_buffer[laneId].m_flags & (NetLane.Flags.Created | NetLane.Flags.Deleted)) != NetLane.Flags.Created) { return; } NetInfo segmentInfo = Singleton <NetManager> .instance.m_segments.m_buffer[segmentId].Info; if (laneIndex >= segmentInfo.m_lanes.Length) { return; } #if DEBUGFLAGS Log._Debug("Flags.setLaneAllowedVehicleTypes: setting allowed vehicles of lane index " + $"{laneIndex} @ seg. {segmentId} to {vehicleTypes.ToString()}"); #endif // save allowed vehicle types into the fast-access array. // (1) ensure that the array is defined and large enough if (laneAllowedVehicleTypesArray[segmentId] == null) { laneAllowedVehicleTypesArray[segmentId] = new ExtVehicleType?[segmentInfo.m_lanes.Length]; } else if (laneAllowedVehicleTypesArray[segmentId].Length < segmentInfo.m_lanes.Length) { ExtVehicleType?[] oldArray = laneAllowedVehicleTypesArray[segmentId]; laneAllowedVehicleTypesArray[segmentId] = new ExtVehicleType?[segmentInfo.m_lanes.Length]; Array.Copy(oldArray, laneAllowedVehicleTypesArray[segmentId], oldArray.Length); } // (2) insert the custom speed limit laneAllowedVehicleTypesArray[segmentId][laneIndex] = vehicleTypes; }
public static void setLaneAllowedVehicleTypes(ushort segmentId, uint laneIndex, uint laneId, ExtVehicleType vehicleTypes) { if (segmentId <= 0 || laneIndex < 0 || laneId <= 0) { return; } if ((Singleton <NetManager> .instance.m_segments.m_buffer[segmentId].m_flags & NetSegment.Flags.Created) == NetSegment.Flags.None) { return; } if (((NetLane.Flags)Singleton <NetManager> .instance.m_lanes.m_buffer[laneId].m_flags & NetLane.Flags.Created) == NetLane.Flags.None) { return; } NetInfo segmentInfo = Singleton <NetManager> .instance.m_segments.m_buffer[segmentId].Info; if (laneIndex >= segmentInfo.m_lanes.Length) { return; } try { Monitor.Enter(laneAllowedVehicleTypesLock); Log._Debug($"Flags.setLaneAllowedVehicleTypes: setting allowed vehicles of lane index {laneIndex} @ seg. {segmentId} to {vehicleTypes.ToString()}"); laneAllowedVehicleTypes[laneId] = vehicleTypes; // save allowed vehicle types into the fast-access array. // (1) ensure that the array is defined and large enough if (laneAllowedVehicleTypesArray[segmentId] == null) { laneAllowedVehicleTypesArray[segmentId] = new ExtVehicleType?[segmentInfo.m_lanes.Length]; } else if (laneAllowedVehicleTypesArray[segmentId].Length < segmentInfo.m_lanes.Length) { var oldArray = laneAllowedVehicleTypesArray[segmentId]; laneAllowedVehicleTypesArray[segmentId] = new ExtVehicleType?[segmentInfo.m_lanes.Length]; Array.Copy(oldArray, laneAllowedVehicleTypesArray[segmentId], oldArray.Length); } // (2) insert the custom speed limit laneAllowedVehicleTypesArray[segmentId][laneIndex] = vehicleTypes; } finally { Monitor.Exit(laneAllowedVehicleTypesLock); } }
public static void setLaneAllowedVehicleTypes(ushort segmentId, uint laneIndex, uint laneId, ExtVehicleType vehicleTypes) { if (segmentId <= 0 || laneIndex < 0 || laneId <= 0) return; if ((Singleton<NetManager>.instance.m_segments.m_buffer[segmentId].m_flags & NetSegment.Flags.Created) == NetSegment.Flags.None) { return; } if (((NetLane.Flags)Singleton<NetManager>.instance.m_lanes.m_buffer[laneId].m_flags & NetLane.Flags.Created) == NetLane.Flags.None) return; NetInfo segmentInfo = Singleton<NetManager>.instance.m_segments.m_buffer[segmentId].Info; if (laneIndex >= segmentInfo.m_lanes.Length) { return; } try { Monitor.Enter(laneAllowedVehicleTypesLock); Log._Debug($"Flags.setLaneAllowedVehicleTypes: setting allowed vehicles of lane index {laneIndex} @ seg. {segmentId} to {vehicleTypes.ToString()}"); laneAllowedVehicleTypes[laneId] = vehicleTypes; // save allowed vehicle types into the fast-access array. // (1) ensure that the array is defined and large enough if (laneAllowedVehicleTypesArray[segmentId] == null) { laneAllowedVehicleTypesArray[segmentId] = new ExtVehicleType?[segmentInfo.m_lanes.Length]; } else if (laneAllowedVehicleTypesArray[segmentId].Length < segmentInfo.m_lanes.Length) { var oldArray = laneAllowedVehicleTypesArray[segmentId]; laneAllowedVehicleTypesArray[segmentId] = new ExtVehicleType?[segmentInfo.m_lanes.Length]; Array.Copy(oldArray, laneAllowedVehicleTypesArray[segmentId], oldArray.Length); } // (2) insert the custom speed limit laneAllowedVehicleTypesArray[segmentId][laneIndex] = vehicleTypes; } finally { Monitor.Exit(laneAllowedVehicleTypesLock); } }