Example #1
0
        public override void SimulationStep()
        {
            base.SimulationStep();

            if (m_mouseRayValid)
            {
                var defaultService = new RaycastService(ItemClass.Service.None, ItemClass.SubService.None, ItemClass.Layer.Default);
                var input          = new RaycastInput(m_mouseRay, m_mouseRayLength)
                {
                    m_rayRight           = m_rayRight,
                    m_netService         = defaultService,
                    m_ignoreCitizenFlags = CitizenInstance.Flags.All,
                    m_ignoreNodeFlags    = NetNode.Flags.All,
                    m_ignoreSegmentFlags = NetSegment.Flags.All
                };

                if (RayCast(input, out RaycastOutput output))
                {
                    if (output.m_building != 0)
                    {
                        m_hoverInstance.Building = output.m_building;
                    }
                }
                else
                {
                    m_hoverInstance.Building = 0;
                }
            }
        }
Example #2
0
        private void DetectHoveredElements()
        {
            _hoveredNodeId = 0;
            if (!m_toolController.IsInsideUI && Cursor.visible)
            {
                var netService = new RaycastService
                {
                    m_service    = ItemClass.Service.None,
                    m_subService = ItemClass.SubService.None,
                    m_itemLayers = ItemClass.Layer.Default | ItemClass.Layer.MetroTunnels,
                };
                var input = new RaycastInput(_mouseRay, _mouseRayLength)
                {
                    m_rayRight         = _rayRight,
                    m_netService       = netService,
                    m_buildingService  = netService,
                    m_propService      = netService,
                    m_treeService      = netService,
                    m_districtNameOnly = true,
                    m_ignoreTerrain    = true,
                    m_ignoreNodeFlags  = IsUndergroundVisible() ? NetNode.Flags.None : (NetNode.Flags.None | NetNode.Flags.Underground),
                };

                if (RayCast(input, out var output))
                {
                    _mousePosition = output.m_hitPos;

                    var id = output.m_netNode;
                    if (id != 0)
                    {
                        var node = Singleton <NetManager> .instance.m_nodes.m_buffer[id];
                        if (!GameAreaManager.instance.PointOutOfArea(node.m_position))
                        {
                            _hoveredNodeId = id;
                        }
                        _hoveredButtonIndex = DetectHoveredButtons(input, id, ref node);
                    }
                    else
                    {
                        _hoveredButtonIndex = 0;
                    }
                }
            }
        }
        public override void SimulationStep()
        {
            base.SimulationStep();

            var mouseRayValid = !UIView.IsInsideUI() && Cursor.visible && !_cursorInSecondaryPanel;

            if (mouseRayValid)
            {
                var mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);
                var mouseRayLength = Camera.main.farClipPlane;
                var rayRight = Camera.main.transform.TransformDirection(Vector3.right);

                var defaultService = new RaycastService(ItemClass.Service.Road, ItemClass.SubService.None, ItemClass.Layer.Default);
                var input = new RaycastInput(mouseRay, mouseRayLength)
                {
                    m_rayRight = rayRight,
                    m_netService = defaultService,
                    m_ignoreNodeFlags = NetNode.Flags.None,
                    m_ignoreSegmentFlags = NetSegment.Flags.Untouchable
                };
                RaycastOutput output;
                if (!RayCast(input, out output))
                {
                    _hoveredSegmentIdx = 0;
                    _hoveredNetNodeIdx = 0;
                    return;
                }

                _hoveredNetNodeIdx = output.m_netNode;

                _hoveredSegmentIdx = output.m_netSegment;
            }

            if (_toolMode == ToolMode.None)
            {
                ToolCursor = null;
            }
            else
            {
                var netTool = ToolsModifierControl.toolController.Tools.OfType<NetTool>().FirstOrDefault(nt => nt.m_prefab != null);

                if (netTool != null && mouseRayValid)
                {
                    ToolCursor = netTool.m_upgradeCursor;
                }
            }
        }