public static void Postfix(ushort nodeID, NetInfo.LaneType laneTypes, VehicleInfo.VehicleType vehicleTypes, ref NetSegment __instance, ref int leftIndex, ref int rightIndex, ref uint leftLane, ref uint rightLane) { if (OptionUI.noJunction) { if (CSURUtil.IsCSURNoJunction(__instance.Info)) { if (leftIndex == -1 && rightIndex == -1 && leftLane == 0 && rightLane == 0) { int debugPedestrianCount = 0; NetManager instance = Singleton <NetManager> .instance; NetInfo info = __instance.Info; int num = info.m_lanes.Length; uint num2 = __instance.m_lanes; int num10 = 0; while (num10 < num && num2 != 0u) { NetInfo.Lane lane2 = info.m_lanes[num10]; if (info.m_lanes[num10].m_laneType.IsFlagSet(NetInfo.LaneType.Pedestrian)) { debugPedestrianCount++; if (lane2.m_position > 0) { //DebugLog.LogToFileOnly($"Fix this case for XR, only one Pedestrian lane {__instance.Info.name}"); //XR case leftIndex = num10; leftLane = num2; } else { //DebugLog.LogToFileOnly($"Fix this case for XL, only one Pedestrian lane {__instance.Info.name}"); //XL case?? rightIndex = num10; rightLane = num2; } break; } num2 = instance.m_lanes.m_buffer[(int)((UIntPtr)num2)].m_nextLane; num10++; } if (debugPedestrianCount == 1) { //DebugLog.LogToFileOnly($"Fix this case, only one Pedestrian lane {__instance.Info.name}"); } if (nodeID == __instance.m_startNode != ((__instance.m_flags & NetSegment.Flags.Invert) != NetSegment.Flags.None)) { int num12 = leftIndex; leftIndex = rightIndex; rightIndex = num12; uint num13 = leftLane; leftLane = rightLane; rightLane = num13; } } } } }
public static void DisableZone() { for (uint num = 0u; num < PrefabCollection <NetInfo> .LoadedCount(); num++) { NetInfo loaded = PrefabCollection <NetInfo> .GetLoaded(num); if (CSURUtil.IsCSURNoJunction(loaded) || CSURUtil.IsCSURLaneOffset(loaded) || CSURUtil.IsCSURExpress(loaded)) { if (loaded.m_netAI is RoadAI) { var AI = loaded.m_netAI as RoadAI; AI.m_enableZoning = false; } } } if (OptionUI.disableZoneUpdateAll) { for (ushort i = 0; i < Singleton <NetManager> .instance.m_segments.m_size; i++) { NetInfo loaded = Singleton <NetManager> .instance.m_segments.m_buffer[i].Info; if (CSURUtil.IsCSURNoJunction(loaded) || CSURUtil.IsCSURLaneOffset(loaded) || CSURUtil.IsCSURExpress(loaded)) { if (Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockEndLeft != 0) { ZoneManager.instance.ReleaseBlock(Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockEndLeft); Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockEndLeft = 0; } if (Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockEndRight != 0) { ZoneManager.instance.ReleaseBlock(Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockEndRight); Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockEndRight = 0; } if (Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockStartLeft != 0) { ZoneManager.instance.ReleaseBlock(Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockStartLeft); Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockStartLeft = 0; } if (Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockStartRight != 0) { ZoneManager.instance.ReleaseBlock(Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockStartRight); Singleton <NetManager> .instance.m_segments.m_buffer[i].m_blockStartRight = 0; } } } } }
public static void Postfix(ref NetNode __instance) { if (OptionUI.noJunction) { NetInfo asset = __instance.Info; if (asset != null) { if (asset.m_netAI is RoadAI) { if (CSURUtil.IsCSURNoJunction(asset)) { if (__instance.CountSegments() == 2) { __instance.m_flags &= ~NetNode.Flags.Junction; } } } } } }
public static void Postfix(ref NetNode __instance, ref int __result) { if (OptionUI.noJunction) { for (int j = 0; j < 8; j++) { ushort segmentID = __instance.GetSegment(j); if (segmentID != 0) { NetInfo asset = Singleton <NetManager> .instance.m_segments.m_buffer[segmentID].Info; if (asset != null) { if (asset.m_netAI is RoadAI) { if (CSURUtil.IsCSURNoJunction(asset)) { __result = 2; } } } } } } }