void CreateNodes(PositionalGraph mazeFloorGraph) { List <PositionalGraphNode> unvisitedNodes = new List <PositionalGraphNode>(); Stack openNodes = new Stack(); foreach (PositionalGraphNode node in mazeFloorGraph.GetNodes()) { unvisitedNodes.Add(node); } PositionalGraphNode currentNode = unvisitedNodes[0]; openNodes.Push(currentNode); unvisitedNodes.Remove(currentNode); while (openNodes.Count > 0) { foreach (PositionalGraphNode node in currentNode.GetConnectedNodes()) { if (unvisitedNodes.Contains(node)) { openNodes.Push(node); unvisitedNodes.Remove(node); } } if (ShouldBeWaypoint(currentNode)) { graph.AddNode(currentNode.position); } currentNode = openNodes.Pop() as PositionalGraphNode; } }
public void UpdateWaypoints(PositionalGraph navGraph) { DestroyWaypoints(); waypoints = new List <GameObject>(); foreach (PositionalGraphNode node in navGraph.GetNodes()) { CreateWaypoint(node); } }
List <Quad> GeneratePlane(Vector3 positionOffset = new Vector3(), WINDING winding = WINDING.clockwise) { List <Quad> quads = new List <Quad>(); foreach (PositionalGraphNode node in floorGraph.GetNodes()) { Quad quad = new Quad(node.position + positionOffset, 2, 2, winding, Vector3.up); quads.Add(quad); } return(quads); }
void ConnectNodes(PositionalGraph mazeFloorGraph) { foreach (PositionalGraphNode node in graph.GetNodes()) { PositionalGraphNode floorNode = mazeFloorGraph.GetNodeAtPostion(node.position); foreach (PositionalGraphNode neighbour in floorNode.GetConnectedNodes()) { bool connectedToWaypoint = false; List <PositionalGraphNode> visitedNodes = new List <PositionalGraphNode>(); visitedNodes.Add(node); PositionalGraphNode nextStep = neighbour; while (!connectedToWaypoint) { visitedNodes.Add(nextStep); PositionalGraphNode existingNavNode = graph.GetNodeAtPostion(nextStep.position); if (existingNavNode != null) { graph.ConnectNodes(node, existingNavNode); connectedToWaypoint = true; } nextStep = nextStep.GetConnectedNodes()[0] as PositionalGraphNode; if (visitedNodes.Contains(nextStep)) { nextStep = nextStep.GetConnectedNodes()[1] as PositionalGraphNode; } } } } }