void CreateWallGraph() { Vector3 wallOffset = new Vector3(spacing / 2, 0, spacing / 2); wallGraph = new PositionalGraph(width + 1, height + 1, spacing, wallOffset); wallGraph.ConnectNodesWithinDistance(spacing); }
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; } }
void CreateMaze() { ProceduralMazeGenerator mazeGenerator = new ProceduralMazeGenerator(); mazeGenerator.Generate(width, height, spacing, System.DateTime.Now.Millisecond); cells = mazeGenerator.cells; pathGraph = mazeGenerator.pathGraph; wallGraph = mazeGenerator.wallGraph; }
public void UpdateWaypoints(PositionalGraph navGraph) { DestroyWaypoints(); waypoints = new List <GameObject>(); foreach (PositionalGraphNode node in navGraph.GetNodes()) { CreateWaypoint(node); } }
public void UpdateMesh(List <MazeCell> cells, PositionalGraph floorGraph, PositionalGraph wallGraph) { CreateMeshObjects(); this.cells = cells; this.floorGraph = floorGraph; this.wallGraph = wallGraph; AssignMesh(floorObject, GenerateFloorMesh()); AssignMesh(wallObject, GenerateWallMesh()); AssignMesh(ceilingObject, GenerateCeilingMesh()); }
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; } } } } }
void CreatePathGraph() { pathGraph = new PositionalGraph(width, height, spacing); }
public PlayerNavigationGraph(PositionalGraph mazeFloorGraph) { graph = new PositionalGraph(); CreateNodes(mazeFloorGraph); ConnectNodes(mazeFloorGraph); }