Ejemplo n.º 1
0
        public void RemovePillar()
        {
            for (uint num = 0u; num < PrefabCollection <NetInfo> .LoadedCount(); num++)
            {
                NetInfo loaded = PrefabCollection <NetInfo> .GetLoaded(num);

                if (loaded != null)
                {
                    if (CSURUtil.IsCSUROffset(loaded))
                    {
                        var          roadAI     = loaded.m_netAI as RoadAI;
                        RoadBridgeAI elevatedAI = null;
                        if ((loaded.m_netAI is RoadBridgeAI) && (Regex.Match(loaded.name, "Elevated", RegexOptions.IgnoreCase)).Success)
                        {
                            elevatedAI = loaded.m_netAI as RoadBridgeAI;
                        }
                        else
                        {
                            continue;
                        }
                        elevatedAI.m_bridgePillarInfo = null;// PrefabCollection<BuildingInfo>.FindLoaded("CSUR 2DC.Ama S-1_Data");
                        Debug.Log("Remove pilla for " + loaded.name.ToString());
                    }
                }
            }
        }
        public static void UpdateSegmentStopFlags(this RoadBridgeAI roadbridge, ushort segmentID, ref NetSegment data)
        {
            Log.Debug($"updateflags on {segmentID}");
            roadbridge.UpdateSegmentFlags(segmentID, ref data);
            NetSegment.Flags flags = data.m_flags & ~(NetSegment.Flags.StopRight | NetSegment.Flags.StopLeft | NetSegment.Flags.StopRight2 | NetSegment.Flags.StopLeft2);
            if (roadbridge.m_info.m_lanes == null)
            {
                return;
            }
            NetManager instance = Singleton <NetManager> .instance;
            bool       inverted = (data.m_flags & NetSegment.Flags.Invert) != NetSegment.Flags.None;
            uint       lane     = instance.m_segments.m_buffer[(int)segmentID].m_lanes;
            int        i        = 0;

            while (i < roadbridge.m_info.m_lanes.Length && lane != 0U)
            {
                NetLane.Flags laneFlags = (NetLane.Flags)instance.m_lanes.m_buffer[(int)((UIntPtr)lane)].m_flags;
                if ((laneFlags & NetLane.Flags.Stop) != NetLane.Flags.None)
                {
                    if (roadbridge.m_info.m_lanes[i].m_position < 0f != inverted)
                    {
                        flags |= NetSegment.Flags.StopLeft;
                    }
                    else
                    {
                        flags |= NetSegment.Flags.StopRight;
                    }
                }
                else if ((laneFlags & NetLane.Flags.Stop2) != NetLane.Flags.None)
                {
                    if (roadbridge.m_info.m_lanes[i].m_position < 0f != inverted)
                    {
                        flags |= NetSegment.Flags.StopLeft2;
                    }
                    else
                    {
                        flags |= NetSegment.Flags.StopRight2;
                    }
                }
                lane = instance.m_lanes.m_buffer[(int)((UIntPtr)lane)].m_nextLane;
                i++;
            }
            data.m_flags = flags;
            Log.Debug($"flags {flags}");
        }
        public static void UpdateSegmentStopFlags(this RoadBridgeAI roadbridge, ushort segmentID, ref NetSegment data)
        {
            roadbridge.UpdateSegmentFlags(segmentID, ref data);
            var oldflags = data.m_flags;

            NetSegment.Flags flags = data.m_flags & ~(NetSegment.Flags.StopRight | NetSegment.Flags.StopLeft | NetSegment.Flags.StopRight2 | NetSegment.Flags.StopLeft2);
            if (roadbridge.m_info.m_lanes != null)
            {
                NetManager instance = Singleton <NetManager> .instance;
                bool       flag     = (data.m_flags & NetSegment.Flags.Invert) != NetSegment.Flags.None;
                uint       num      = instance.m_segments.m_buffer[(int)segmentID].m_lanes;
                int        num2     = 0;
                while (num2 < roadbridge.m_info.m_lanes.Length && num != 0U)
                {
                    NetLane.Flags flags2 = (NetLane.Flags)instance.m_lanes.m_buffer[(int)((UIntPtr)num)].m_flags;
                    if ((flags2 & NetLane.Flags.Stop) != NetLane.Flags.None)
                    {
                        if (roadbridge.m_info.m_lanes[num2].m_position < 0f != flag)
                        {
                            flags |= NetSegment.Flags.StopLeft;
                        }
                        else
                        {
                            flags |= NetSegment.Flags.StopRight;
                        }
                    }
                    if ((flags2 & NetLane.Flags.Stop2) != NetLane.Flags.None)
                    {
                        if (roadbridge.m_info.m_lanes[num2].m_position < 0f != flag)
                        {
                            flags |= NetSegment.Flags.StopLeft2;
                        }
                        else
                        {
                            flags |= NetSegment.Flags.StopRight2;
                        }
                    }
                    num = instance.m_lanes.m_buffer[(int)((UIntPtr)num)].m_nextLane;
                    num2++;
                }
            }
            Log.Debug($"oldflags {oldflags} newflags {flags} on segment {segmentID} bridge");
            data.m_flags = flags;
        }
Ejemplo n.º 4
0
        public void InstallPillar()
        {
            for (uint num = 0u; num < PrefabCollection <NetInfo> .LoadedCount(); num++)
            {
                NetInfo loaded = PrefabCollection <NetInfo> .GetLoaded(num);

                if (CSURUtil.IsCSUR(loaded))
                {
                    RoadBridgeAI elevatedAI = null;
                    if ((loaded.m_netAI is RoadBridgeAI) && (Regex.Match(loaded.name, "Elevated", RegexOptions.IgnoreCase)).Success && (loaded.m_segments.Length != 0))
                    {
                        elevatedAI = loaded.m_netAI as RoadBridgeAI;
                    }
                    else
                    {
                        continue;
                    }

                    //Caculate lane num
                    int laneNum = (int)CSURUtil.CountCSURSVehicleLanes(loaded);

                    if (!CSURUtil.IsCSURDual(loaded))
                    {
                        if (Regex.Match(loaded.name, "CSUR-T", RegexOptions.IgnoreCase).Success)
                        {
                            laneNum = laneNum - 1;
                        }

                        if (laneNum < 0)
                        {
                            laneNum = 0;
                        }

                        switch (laneNum)
                        {
                        case 0:
                        case 1:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = " + laneNum.ToString());
                            DebugLog.LogToFileOnly("Try to Load pillar Ama S-1_Data");
                            elevatedAI.m_bridgePillarOffset = 0.5f;
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama S-1_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama S-1_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama S-1_Data");
                            }
                            break;

                        case 2:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 2");
                            DebugLog.LogToFileOnly("Try to Load pillar Ama S-2_Data");
                            elevatedAI.m_bridgePillarOffset = 1f;
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama S-2_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama S-2_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama S-2_Data");
                            }
                            break;

                        case 3:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 3");
                            DebugLog.LogToFileOnly("Try to Load pillar Ama S-3_Data");
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama S-3_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama S-3_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama S-3_Data");
                            }
                            break;

                        case 4:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 4");
                            DebugLog.LogToFileOnly("Try to Load pillar Ama G-3_Data");
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama G-3_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama G-3_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama G-3_Data");
                            }
                            break;

                        case 5:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 5");
                            DebugLog.LogToFileOnly("Try to Load pillar Ama G-4_Data");
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama G-4_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama G-4_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama G-4_Data");
                            }
                            break;

                        default:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = " + laneNum.ToString());
                            DebugLog.LogToFileOnly("Try to Load pillar Ama G-5_Data");
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama G-5_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama G-5_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama G-5_Data");
                            }
                            break;
                        }
                    }
                    else
                    {
                        /*if (Regex.Match(loaded.name, "CSUR-S", RegexOptions.IgnoreCase).Success)
                         *  laneNum = laneNum - 1;
                         * else if (Regex.Match(loaded.name, "CSUR-T", RegexOptions.IgnoreCase).Success)
                         *  laneNum = laneNum - 1;
                         * else if (Regex.Match(loaded.name, "CSUR-R", RegexOptions.IgnoreCase).Success)
                         *  laneNum = laneNum - 1;*/

                        if (laneNum < 0)
                        {
                            laneNum = 0;
                        }

                        //laneNum = laneNum * 2;
                        switch (laneNum)
                        {
                        case 0:
                        case 2:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = " + laneNum.ToString());
                            DebugLog.LogToFileOnly("Try to Load pillar Ama S-2_Data");
                            elevatedAI.m_bridgePillarOffset = 1f;
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama S-2_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama S-2_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama S-2_Data");
                            }
                            break;

                        case 4:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 4");
                            DebugLog.LogToFileOnly("Try to Load pillar Ama M-2_Data");
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama M-2_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama M-2_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama M-2_Data");
                            }
                            break;

                        case 6:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 6");
                            DebugLog.LogToFileOnly("Try to Load pillar Ama M-2_Data");
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama M-2_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama M-2_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama M-2_Data");
                            }
                            break;

                        case 8:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 8");
                            DebugLog.LogToFileOnly("Try to Load pillar Ama M-4_Data");
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama M-4_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama M-4_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama M-4_Data");
                            }
                            break;

                        case 10:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 10");
                            DebugLog.LogToFileOnly("Try to Load pillar Ama G-8DR_Data");
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama G-8DR_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama G-8DR_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama G-8DR_Data");
                            }
                            break;

                        default:
                            DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = " + laneNum.ToString());
                            DebugLog.LogToFileOnly("Try to Load pillar Ama G-8DR_Data");
                            if (PrefabCollection <BuildingInfo> .FindLoaded("Ama G-8DR_Data") != null)
                            {
                                elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama G-8DR_Data");
                            }
                            else
                            {
                                DebugLog.LogToFileOnly("Failed Load pillar Ama G-8DR_Data");
                            }
                            break;
                        }
                    }
                }
            }
        }