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