Esempio n. 1
0
        void HandleLaneCustomization()
        {
            // Handle lane settings
            Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);

            m_hoveredLanes = ushort.MaxValue;
            foreach (FastList <SegmentLaneMarker> laneMarkers in m_hoveredLaneMarkers.Values)
            {
                if (laneMarkers.m_size == 0)
                {
                    continue;
                }

                for (int i = 0; i < laneMarkers.m_size; i++)
                {
                    SegmentLaneMarker marker = laneMarkers.m_buffer[i];
                    if (NetManager.instance.m_lanes.m_buffer[marker.m_lane].m_segment != m_hoveredSegment)
                    {
                        continue;
                    }

                    if (marker.IntersectRay(mouseRay))
                    {
                        m_hoveredLanes = marker.m_laneIndex;
                        break;
                    }
                }

                if (m_hoveredLanes != ushort.MaxValue)
                {
                    break;
                }
            }

            if (m_hoveredLanes != ushort.MaxValue && Input.GetMouseButtonUp(0))
            {
                SegmentLaneMarker[] hoveredMarkers = m_hoveredLaneMarkers[m_hoveredLanes].ToArray();
                HashSet <uint>      hoveredLanes   = new HashSet <uint>(hoveredMarkers.Select(m => m.m_lane));
                if (m_selectedLaneMarkers.RemoveAll(m => hoveredLanes.Contains(m.m_lane)) == 0)
                {
                    m_selectedLaneMarkers.AddRange(hoveredMarkers);
                }
            }
            else if (Input.GetMouseButtonUp(1))
            {
                m_selectedLaneMarkers.Clear();
            }
        }
Esempio n. 2
0
 /// <summary>
 ///  Intersects mouse ray with marker bounds.
 /// </summary>
 /// <returns><c>true</c>if mouse ray intersects with marker <c>false</c> otherwise</returns>
 internal bool IntersectRay() => SegmentMarker.IntersectRay();