CSL_Traffic.RoadCustomizerTool.HandleLaneCustomization C# (CSharp) Метод

HandleLaneCustomization() приватный Метод

private HandleLaneCustomization ( ) : void
Результат void
		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)
				{
					bool firstLane = false;
					if (m_selectedLaneMarkers.Count == 0 && OnStartLaneCustomization != null)
						firstLane = true;

					m_selectedLaneMarkers.AddRange(hoveredMarkers);

					if (firstLane)
						OnStartLaneCustomization();
				}
				else if (m_selectedLaneMarkers.Count == 0 && OnEndLaneCustomization != null)
					OnEndLaneCustomization();
			}
			else if (Input.GetMouseButtonUp(1))
			{
				m_selectedLaneMarkers.Clear();
				if (OnEndLaneCustomization != null)
					OnEndLaneCustomization();
			}
		}