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; } } }
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; } } }