Exemplo n.º 1
0
        public static void UpdateLaneMarkers(ushort segmentId)
        {
            NetManager             netManager  = NetManager.instance;
            NetSegment             segment     = netManager.m_segments.m_buffer[segmentId];
            LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance;
            ushort startLeftSegment            = segment.m_startLeftSegment;
            ushort startRightSegment           = segment.m_startRightSegment;
            ushort endLeftSegment  = segment.m_endLeftSegment;
            ushort endRightSegment = segment.m_endRightSegment;

            if (!pathManager.laneChangerSegments[segmentId].PermittedConnectionTo(startLeftSegment))
            {
                UpdateLaneMarker(NetLane.Flags.Left, NetInfo.Direction.Backward, segment);
            }
            if (!pathManager.laneChangerSegments[segmentId].PermittedConnectionTo(startRightSegment))
            {
                UpdateLaneMarker(NetLane.Flags.Right, NetInfo.Direction.Backward, segment);
            }
            if (!pathManager.laneChangerSegments[segmentId].PermittedConnectionTo(endLeftSegment))
            {
                UpdateLaneMarker(NetLane.Flags.Left, NetInfo.Direction.Forward, segment);
            }
            if (!pathManager.laneChangerSegments[segmentId].PermittedConnectionTo(endRightSegment))
            {
                UpdateLaneMarker(NetLane.Flags.Right, NetInfo.Direction.Forward, segment);
            }
        }
Exemplo n.º 2
0
        void AddNodeConnections(NetNode node)
        {
            LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance;

            for (int i = 0; i < node.CountSegments(); i++)
            {
                ushort seg = node.GetSegment(i);
                if (seg != this.segmentId)
                {
                    pathManager.laneChangerSegments[segmentId].AddPermittedConnection(seg);
                }
            }
        }
Exemplo n.º 3
0
        public override void OnCreated(ILoading loading)
        {
            FieldInfo              pathManagerInstance = typeof(ColossalFramework.Singleton <PathManager>).GetField("sInstance", BindingFlags.Static | BindingFlags.NonPublic);
            PathManager            stockPathManager    = PathManager.instance;
            LaneChangerPathManager lcPathManager       = stockPathManager.gameObject.AddComponent <LaneChangerPathManager>();

            lcPathManager.UpdateWithPathManagerValues(stockPathManager);
            pathManagerInstance.SetValue(null, lcPathManager);
            FastList <ISimulationManager> managers = typeof(SimulationManager).GetField("m_managers", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null) as FastList <ISimulationManager>;

            managers.Remove(stockPathManager);
            managers.Add(lcPathManager);
            GameObject.Destroy(stockPathManager, 10f);
        }
Exemplo n.º 4
0
 public override void RenderOverlay(RenderManager.CameraInfo cameraInfo)
 {
     if (currentSegment != 0)
     {
         NetTool.RenderOverlay(RenderManager.instance.CurrentCameraInfo, ref NetManager.instance.m_segments.m_buffer[currentSegment], new Color(0.0f, 0.0f, 0.5f, 0.6f), new Color(0f, 0.0f, 0.5f, 0.9f));
         LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance;
         NetManager             netManager  = NetManager.instance;
         if (pathManager.laneChangerSegments[currentSegment] != null)
         {
             RenderOverlayForSegments(cameraInfo, netManager.m_nodes.m_buffer[netManager.m_segments.m_buffer[currentSegment].m_startNode]);
             RenderOverlayForSegments(cameraInfo, netManager.m_nodes.m_buffer[netManager.m_segments.m_buffer[currentSegment].m_endNode]);
         }
     }
     base.RenderOverlay(cameraInfo);
 }
Exemplo n.º 5
0
        private void DrawSegmentInfoBox()
        {
            NetManager             netManager  = Singleton <NetManager> .instance;
            LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance;

            this.width             = 250f;
            this.height            = 60f;
            this.transformPosition = calculateBoxPosition();

            //ushort startNodeID = currentSegment.m_startNode;
            //ushort endNodeID = currentSegment.m_endNode;
            //NetNode startNode = netManager.m_nodes.m_buffer[startNodeID];
            //NetNode endNode = netManager.m_nodes.m_buffer[endNodeID];
            UILabel boxLabel = this.AddUIComponent <UILabel>();

            boxLabel.relativePosition = new Vector3(1f, 1f);
            boxLabel.text             = "Segment #" + this.segmentId;
            DrawEnableButton();
        }
Exemplo n.º 6
0
        void ToggleLaneControl(UIComponent component, UIMouseEventParameter eventParam)
        {
            LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance;
            UIButton button = (UIButton)component;

            if (pathManager.laneChangerSegments[segmentId] == null)
            {
                pathManager.laneChangerSegments[segmentId] = new LaneChangerSegment();
                AddNodeConnections(NetManager.instance.m_nodes.m_buffer[currentSegment.m_startNode]);
                AddNodeConnections(NetManager.instance.m_nodes.m_buffer[currentSegment.m_endNode]);
                button.text = "Disable Lane Control";
            }
            else
            {
                pathManager.laneChangerSegments[segmentId] = null;
                NetManager.instance.UpdateSegment(segmentId);
                button.text = "Enable Lane Control";
            }
        }
Exemplo n.º 7
0
        void RenderOverlayForSegments(RenderManager.CameraInfo cameraInfo, NetNode node)
        {
            LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance;

            for (int i = 0; i < node.CountSegments(); i++)
            {
                ushort segId = node.GetSegment(i);
                if (segId != currentSegment)
                {
                    if (pathManager.laneChangerSegments[currentSegment].PermittedConnectionTo(segId))
                    {
                        NetTool.RenderOverlay(RenderManager.instance.CurrentCameraInfo, ref NetManager.instance.m_segments.m_buffer[segId], new Color(0.0f, 1f, 0.0f, 0.6f), new Color(0f, 1f, 0f, 0.9f));
                    }
                    else
                    {
                        NetTool.RenderOverlay(RenderManager.instance.CurrentCameraInfo, ref NetManager.instance.m_segments.m_buffer[segId], new Color(1f, 0.0f, 0.0f, 0.6f), new Color(1f, 0f, 0f, 0.9f));
                    }
                }
            }
        }
Exemplo n.º 8
0
        private void DrawEnableButton()
        {
            UIButton enableToggle = this.AddUIComponent <UIButton>();

            enableToggle.relativePosition = new Vector3(5f, 15f);
            enableToggle.width            = 150f;
            enableToggle.height           = 30f;
            enableToggle.normalBgSprite   = "ButtonMenu";
            enableToggle.disabledBgSprite = "ButtonMenuDisabled";
            enableToggle.hoveredBgSprite  = "ButtonMenuHovered";
            enableToggle.pressedBgSprite  = "ButtonMenuPressed";
            LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance;

            if (pathManager.laneChangerSegments[segmentId] == null)
            {
                enableToggle.text = "Enable Lane Control";
            }
            else
            {
                enableToggle.text = "Disable Lane Control";
            }
            enableToggle.eventClick += ToggleLaneControl;
        }
Exemplo n.º 9
0
        override protected void OnToolUpdate()
        {
            base.OnToolUpdate();
            // Cast ray, find segment
            // Display lane info
            if (Input.GetMouseButtonDown(0) && !this.m_toolController.IsInsideUI)
            {
                ushort segmentId = GetSegmentAtCursor();
                LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance;
                if (segmentId != 0)
                {
                    if (currentSegment == 0)
                    {
                        if (box == null)
                        {
                            UIView v = UIView.GetAView();
                            box = (LaneUIPanel)v.AddUIComponent(typeof(LaneUIPanel));
                        }
                        NetSegment segment = NetManager.instance.m_segments.m_buffer[segmentId];
                        box.changeSegment(segment, segmentId);
                        currentSegment = segmentId;
                    }
                    else if (pathManager.laneChangerSegments[currentSegment] != null && IsSegmentConnected(currentSegment, segmentId))
                    {
                        if (pathManager.laneChangerSegments[currentSegment].PermittedConnectionTo(segmentId))
                        {
                            pathManager.laneChangerSegments[currentSegment].RemovePermittedConnection(segmentId);
                        }
                        else
                        {
                            pathManager.laneChangerSegments[currentSegment].AddPermittedConnection(segmentId);
                        }
                        UpdateSegmentLaneMarkers();
                    }
                    else
                    {
                        Object.Destroy(box);
                        UIView v = UIView.GetAView();
                        box = (LaneUIPanel)v.AddUIComponent(typeof(LaneUIPanel));
                        NetSegment segment = NetManager.instance.m_segments.m_buffer[segmentId];
                        box.changeSegment(segment, segmentId);
                        currentSegment = segmentId;
                    }
                }
            }
            else if (Input.GetMouseButtonDown(1) && !this.m_toolController.IsInsideUI)
            {
                Object.Destroy(box);
                currentSegment = 0;
            }

            //if (box == null && Input.GetMouseButtonDown(0))
            //{
            //    ushort segmentId = GetSegmentAtCursor();
            //    if (segmentId != 0)
            //    {
            //        NetSegment segment = Singleton<NetManager>.instance.m_segments.m_buffer[segmentId];
            //        if (box != null)
            //        {
            //            Object.Destroy(box);
            //        }
            //        UIView v = UIView.GetAView();
            //        box = (LaneUIPanel)v.AddUIComponent(typeof(LaneUIPanel));
            //        box.changeSegment(segment, segmentId);
            //    }
            //}
        }