/* Depth-first search */ private void DFS(ushort node) { noInfiniteRecursion++; if (noInfiniteRecursion > RECURSION_TRESHOLD) { UI.UIWindow.instance.ThrowErrorMsg("Error: DFS method exeeded max recursion limit"); OuterNodes = OuterSegments = InnerNodes = InnerSegments = new List <ushort>(); return; } visitedNodes.Add(node); InnerNodes.Add(node); NetNode netNode = GetNode(node); for (int i = 0; i < MAX_SEGMENTS_PER_NODE; i++) { //Debug.Log(string.Format("NodeID: {0}; segment no. {1}...",node,i)); ushort segment = netNode.GetSegment(i); //Debug.Log(string.Format("ID of that segment is {0}", segment)); if (!segmentExists(segment)) { continue; } NetSegment curSegment = GetSegment(segment); ushort newNode = getOtherNode(node, segment); if (isVisited(newNode)) { continue; } NetNode newNetNode = GetNode(newNode); visitedNodes.Add(newNode); /* Checking, whether the node is inside the roundabout or not. If not, it is added to the edge nodes and the search ends there. */ if (!Ellipse.IsInsideEllipse(newNetNode.m_position)) { OuterNodes.Add(newNode); OuterSegments.Add(segment); } else { InnerNodes.Add(newNode); InnerSegments.Add(segment); DFS(newNode); } } }