示例#1
0
        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;
                        }
                    }
                }
            }
        }
示例#2
0
        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;
                     }
                 }
             }
         }
     }
 }
示例#4
0
 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;
                         }
                     }
                 }
             }
         }
     }
 }