Exemple #1
0
        public static float ChangeHalfWidth(float halfWidth0, ushort segment)
        {
            var data = Singleton <NetManager> .instance.m_segments.m_buffer[segment];

            if (OptionUI.alignZone)
            {
                if (CSURUtil.IsCSUR(data.Info))
                {
                    if (data.Info.m_halfWidth < 9f)
                    {
                        return(8f);
                    }
                    else if (data.Info.m_halfWidth < 17f)
                    {
                        return(16f);
                    }
                    else if (data.Info.m_halfWidth < 25f)
                    {
                        return(24f);
                    }
                    else if (data.Info.m_halfWidth < 33f)
                    {
                        return(32f);
                    }
                    else if (data.Info.m_halfWidth < 41f)
                    {
                        return(40f);
                    }
                }
            }
            return(halfWidth0);
        }
Exemple #2
0
 public static void Prefix(ref NetSegment data)
 {
     if (OptionUI.alignZone)
     {
         if (CSURUtil.IsCSUR(data.Info))
         {
             if (!segmentHalfWidthLock[data.m_infoIndex])
             {
                 segmentHalfWidth[data.m_infoIndex] = data.Info.m_halfWidth;
                 if (data.Info.m_halfWidth < 9f)
                 {
                     data.Info.m_halfWidth = 8f;
                 }
                 else if (data.Info.m_halfWidth < 17f)
                 {
                     data.Info.m_halfWidth = 16f;
                 }
                 else if (data.Info.m_halfWidth < 25f)
                 {
                     data.Info.m_halfWidth = 24f;
                 }
                 else if (data.Info.m_halfWidth < 33f)
                 {
                     data.Info.m_halfWidth = 32f;
                 }
                 else if (data.Info.m_halfWidth < 41f)
                 {
                     data.Info.m_halfWidth = 40f;
                 }
                 segmentHalfWidthLock[data.m_infoIndex] = true;
             }
         }
     }
 }
Exemple #3
0
        public static void Prefix(ref NetSegment __instance, ushort segmentID, bool start)
        {
            NetInfo    info      = __instance.Info;
            NetManager instance  = Singleton <NetManager> .instance;
            ushort     num       = (!start) ? __instance.m_endNode : __instance.m_startNode;
            ushort     num2      = (!start) ? __instance.m_startNode : __instance.m_endNode;
            Vector3    position  = instance.m_nodes.m_buffer[(int)num].m_position;
            Vector3    position2 = instance.m_nodes.m_buffer[(int)num2].m_position;
            Vector3    startDir  = (!start) ? __instance.m_endDirection : __instance.m_startDirection;
            Vector3    endDir    = (!start) ? __instance.m_startDirection : __instance.m_endDirection;
            // NON-STOCK CODE STARTS
            float m_minCornerOffset   = 0f;
            float tempMinCornerOffset = 1000f;
            int   segmentCount        = 0;
            bool  isCSURRoad          = false;

            for (int i = 0; i < 8; i++)
            {
                ushort segment1 = instance.m_nodes.m_buffer[num].GetSegment(i);
                if (segment1 != 0)
                {
                    segmentCount++;
                    if (CSURUtil.IsCSUR(Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info))
                    {
                        isCSURRoad = true;
                    }
                    if (Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info.m_minCornerOffset < tempMinCornerOffset)
                    {
                        tempMinCornerOffset = Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info.m_minCornerOffset;
                    }
                }
            }

            if (isCSURRoad)
            {
                if (tempMinCornerOffset != 1000f)
                {
                    m_minCornerOffset = tempMinCornerOffset;
                }
                //direct node
                if (segmentCount == 2)
                {
                    m_minCornerOffset = m_minCornerOffset / 2f;
                    if (m_minCornerOffset > 24f)
                    {
                        m_minCornerOffset = 24f;
                    }
                }

                //DebugLog.LogToFileOnly("Pre m_minCornerOffset = " + m_minCornerOffset.ToString());
                if (!segmentOffsetLock[__instance.m_infoIndex])
                {
                    segmentOffset[__instance.m_infoIndex]     = __instance.Info.m_minCornerOffset;
                    segmentOffsetLock[__instance.m_infoIndex] = true;
                    __instance.Info.m_minCornerOffset         = m_minCornerOffset;
                }
            }
            //DebugLog.LogToFileOnly("Pre m_minCornerOffset = " + __instance.Info.m_minCornerOffset.ToString());
        }
Exemple #4
0
        public void ChangeDefaultSpeedAndConstructionFee()
        {
            if (OptionUI.tempPatchForSpeedAndPrice)
            {
                for (uint num = 0u; num < PrefabCollection <NetInfo> .LoadedCount(); num++)
                {
                    NetInfo asset = PrefabCollection <NetInfo> .GetLoaded(num);

                    if (asset != null)
                    {
                        if (asset.m_netAI is RoadAI)
                        {
                            if (CSURUtil.IsCSUR(asset))
                            {
                                int laneNum = (int)CSURUtil.CountCSURSVehicleLanes(asset);
                                if (CSURUtil.IsCSURDual(asset))
                                {
                                    if (laneNum <= 6)
                                    {
                                        for (int j = 0; j < asset.m_lanes.Length; j++)
                                        {
                                            asset.m_lanes[j].m_speedLimit = 0.6f + (laneNum >> 1) / 5f;
                                        }
                                    }
                                }
                                else
                                {
                                    if (laneNum <= 3)
                                    {
                                        for (int j = 0; j < asset.m_lanes.Length; j++)
                                        {
                                            asset.m_lanes[j].m_speedLimit = 0.6f + laneNum / 5f;
                                        }
                                    }
                                }
                                laneNum += (int)CSURUtil.CountCSURSOtherLanes(asset, true);

                                float width = 0;
                                if (asset.m_lanes.Length > 0)
                                {
                                    width = asset.m_lanes[asset.m_sortedLanes[0]].m_position - asset.m_lanes[asset.m_sortedLanes[asset.m_lanes.Length - 1]].m_position;
                                }

                                if (width < 0)
                                {
                                    width = -width;
                                }

                                PlayerNetAI AI = asset.m_netAI as PlayerNetAI;
                                AI.m_constructionCost = 400 * laneNum + (int)(width * 100);
                            }
                        }
                    }
                }
            }
        }
Exemple #5
0
 public void RefreshNode()
 {
     for (ushort i = 0; i < Singleton <NetManager> .instance.m_nodes.m_size; i++)
     {
         NetInfo asset = Singleton <NetManager> .instance.m_nodes.m_buffer[i].Info;
         if (CSURUtil.IsCSUR(asset))
         {
             Singleton <NetManager> .instance.UpdateNode(i);
         }
     }
 }
        public static void Prefix(ref NetSegment __instance, bool start)
        {
            if (OptionUI.fixLargeJunction)
            {
                NetManager instance = Singleton <NetManager> .instance;
                ushort     num      = (!start) ? __instance.m_endNode : __instance.m_startNode;
                // NON-STOCK CODE STARTS
                float m_minCornerOffset   = 0f;
                float tempMinCornerOffset = 1000f;
                int   segmentCount        = 0;
                bool  isCSURRoad          = false;
                for (int i = 0; i < 8; i++)
                {
                    ushort segment1 = instance.m_nodes.m_buffer[num].GetSegment(i);
                    if (segment1 != 0)
                    {
                        segmentCount++;
                        if (CSURUtil.IsCSUR(Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info))
                        {
                            isCSURRoad = true;
                        }
                        if (Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info.m_minCornerOffset < tempMinCornerOffset)
                        {
                            tempMinCornerOffset = Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info.m_minCornerOffset;
                        }
                    }
                }

                if (isCSURRoad)
                {
                    if (tempMinCornerOffset != 1000f)
                    {
                        m_minCornerOffset = tempMinCornerOffset;
                    }
                    //direct node
                    if (segmentCount == 2)
                    {
                        m_minCornerOffset = m_minCornerOffset / 2f;
                        if (m_minCornerOffset > 24f)
                        {
                            m_minCornerOffset = 24f;
                        }
                    }

                    if (!segmentOffsetLock[__instance.m_infoIndex])
                    {
                        segmentOffset[__instance.m_infoIndex]     = __instance.Info.m_minCornerOffset;
                        segmentOffsetLock[__instance.m_infoIndex] = true;
                        __instance.Info.m_minCornerOffset         = m_minCornerOffset;
                    }
                }
            }
        }
Exemple #7
0
 public static void Postfix(ref NetSegment data)
 {
     if (OptionUI.alignZone)
     {
         if (CSURUtil.IsCSUR(data.Info))
         {
             if (segmentHalfWidthLock[data.m_infoIndex])
             {
                 data.Info.m_halfWidth = segmentHalfWidth[data.m_infoIndex];
                 segmentHalfWidthLock[data.m_infoIndex] = false;
             }
         }
     }
 }
Exemple #8
0
 public static bool Prefix(ref NetSegment __instance, ushort segmentID)
 {
     if (OptionUI.noJunction)
     {
         NetInfo asset = __instance.Info;
         if (asset != null)
         {
             if (asset.m_netAI is RoadAI)
             {
                 if (CSURUtil.IsCSUR(asset))
                 {
                     CSURUpdateEndSegments(ref __instance, segmentID);
                     return(false);
                 }
             }
         }
     }
     return(true);
 }
 public void RefreshSegment()
 {
     for (ushort i = 0; i < Singleton <NetManager> .instance.m_segments.m_size; i++)
     {
         NetInfo asset = Singleton <NetManager> .instance.m_segments.m_buffer[i].Info;
         if (asset != null)
         {
             if (CSURUtil.IsCSUR(asset))
             {
                 if (asset.m_netAI is RoadAI)
                 {
                     Singleton <NetManager> .instance.UpdateSegment(i);
                 }
                 else
                 {
                     Singleton <NetManager> .instance.m_segments.m_buffer[i].UpdateLanes(i, true);
                 }
             }
         }
     }
 }
Exemple #10
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;
                        }
                    }
                }
            }
        }
Exemple #11
0
        public void OnGUI()
        {
            if (!(Loader.is1637663252 | Loader.is583429740 | Loader.is1806963141))
            {
                return;
            }

            if ((laterLeftClick == 8) && needLaterLeftClick)
            {
                laterLeftClick = 0;
                MouseSimulater.LeftClick();
                needLaterLeftClick = false;
            }
            else if (needLaterLeftClick)
            {
                laterLeftClick++;
            }

            var e = Event.current;

            // Checking key presses
            if (OptionsKeymappingFunction.m_stayinlane.IsPressed(e))
            {
                Assembly TMPE               = Assembly.Load("TrafficManager");
                var      selectedNodeId     = TMPE.GetType("TrafficManager.UI.TrafficManagerTool").GetProperty("SelectedNodeId");
                var      TrafficManagerTool = TMPE.CreateInstance("TrafficManager.UI.TrafficManagerTool");
                ushort   node               = (ushort)selectedNodeId.GetValue(TrafficManagerTool, null);
                DebugLog.LogToFileOnly("TMPE select node = " + node.ToString());
                NetInfo asset = Singleton <NetManager> .instance.m_nodes.m_buffer[node].Info;
                if (CSURUtil.IsCSUR(asset))
                {
                    bool IsCSURRLane  = false;
                    bool IsCSURDual   = false;
                    bool IsCSURSingle = false;
                    for (int j = 0; j < 8; j++)
                    {
                        ushort segmentID = Singleton <NetManager> .instance.m_nodes.m_buffer[node].GetSegment(j);
                        if (segmentID != 0)
                        {
                            var segment = Singleton <NetManager> .instance.m_segments.m_buffer[segmentID];
                            if (CSURUtil.IsCSUR(segment.Info))
                            {
                                if (CSURUtil.IsCSURDual(segment.Info))
                                {
                                    IsCSURDual = true;
                                }
                                else
                                {
                                    if (CSURUtil.IsCSURRLaneOffset(segment.Info))
                                    {
                                        IsCSURRLane = true;
                                        break;
                                    }
                                    IsCSURSingle = true;
                                }
                            }
                        }
                    }
                    if (IsCSURRLane || (IsCSURDual && IsCSURSingle))
                    {
                        AddLaneConnectionForCSUR(node, TMPE);
                        //refresh
                        MouseSimulater.RightClick();
                        needLaterLeftClick = true;
                    }
                }
            }

            if (OptionsKeymappingFunction.m_stayinlaneAll.IsPressed(e))
            {
                Assembly TMPE = Assembly.Load("TrafficManager");
                for (ushort i = 0; i < Singleton <NetManager> .instance.m_nodes.m_size; i++)
                {
                    bool IsCSURRLane  = false;
                    bool IsCSURDual   = false;
                    bool IsCSURSingle = false;
                    for (int j = 0; j < 8; j++)
                    {
                        ushort segmentID = Singleton <NetManager> .instance.m_nodes.m_buffer[i].GetSegment(j);
                        if (segmentID != 0)
                        {
                            var segment = Singleton <NetManager> .instance.m_segments.m_buffer[segmentID];
                            if (CSURUtil.IsCSUR(segment.Info))
                            {
                                if (CSURUtil.IsCSURDual(segment.Info))
                                {
                                    IsCSURDual = true;
                                }
                                else
                                {
                                    if (CSURUtil.IsCSURRLaneOffset(segment.Info))
                                    {
                                        IsCSURRLane = true;
                                        break;
                                    }
                                    IsCSURSingle = true;
                                }
                            }
                        }
                    }
                    if (IsCSURRLane || (IsCSURDual && IsCSURSingle))
                    {
                        AddLaneConnectionForCSUR(i, TMPE);
                    }
                }
            }
        }