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

OnToolUpdate() защищенный Метод

protected OnToolUpdate ( ) : void
Результат void
		protected override void OnToolUpdate()
		{
			base.OnToolUpdate();

			if (Input.GetKeyUp(KeyCode.PageDown))
				InfoManager.instance.SetCurrentMode(InfoManager.InfoMode.Traffic, InfoManager.SubInfoMode.Default);
			else if (Input.GetKeyUp(KeyCode.PageUp))
				InfoManager.instance.SetCurrentMode(InfoManager.InfoMode.None, InfoManager.SubInfoMode.Default);

			if (m_toolController.IsInsideUI)
				return;

			if (m_selectedNode != 0)
			{
				HandleIntersectionRouting();
				return;
			}

			if (m_hoveredSegment != 0)
			{
				HandleLaneCustomization();
			}

			if (!RayCastSegmentAndNode(out m_hoveredSegment, out m_hoveredNode))
			{
				// clear lanes
				if (Input.GetMouseButtonUp(1))
				{
					m_selectedLaneMarkers.Clear();
					if (OnEndLaneCustomization != null)
						OnEndLaneCustomization();
				}
					
				m_segments.Clear();
				m_hoveredLaneMarkers.Clear();
				return;
			}
				

			if (m_hoveredSegment != 0)
			{
				NetSegment segment = NetManager.instance.m_segments.m_buffer[m_hoveredSegment];
				NetNode startNode = NetManager.instance.m_nodes.m_buffer[segment.m_startNode];
				NetNode endNode = NetManager.instance.m_nodes.m_buffer[segment.m_endNode];
				Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);
					
				if (startNode.CountSegments() > 1)
				{
					Bounds bounds = startNode.m_bounds;
					if (m_hoveredNode != 0)
						bounds.extents /= 2f;
					if (bounds.IntersectRay(mouseRay))
					{
						m_hoveredSegment = 0;
						m_hoveredNode = segment.m_startNode;
					}
				}

				if (m_hoveredSegment != 0 && endNode.CountSegments() > 1)
				{
					Bounds bounds = endNode.m_bounds;
					if (m_hoveredNode != 0)
						bounds.extents /= 2f;
					if (bounds.IntersectRay(mouseRay))
					{
						m_hoveredSegment = 0;
						m_hoveredNode = segment.m_endNode;
					}
				}

				if (m_hoveredSegment != 0)
				{
					m_hoveredNode = 0;
					if (!m_segments.ContainsKey(m_hoveredSegment))
					{
						m_segments.Clear();
						SetSegments(m_hoveredSegment);
						SetLaneMarkers();
					}
				}
				else if (Input.GetMouseButtonUp(1))
				{
					// clear lane selection
					m_selectedLaneMarkers.Clear();
					if (OnEndLaneCustomization != null)
						OnEndLaneCustomization();
				}
						
			}
			else if (m_hoveredNode != 0 && NetManager.instance.m_nodes.m_buffer[m_hoveredNode].CountSegments() < 2)
			{
				m_hoveredNode = 0;
			}

			if (m_hoveredSegment == 0)
			{
				m_segments.Clear();
				m_hoveredLaneMarkers.Clear();
			}

			if (Input.GetMouseButtonUp(0))
			{
				m_selectedNode = m_hoveredNode;
				m_hoveredNode = 0;

				if (m_selectedNode != 0)
					SetNodeMarkers(m_selectedNode, true);
			}
		}