예제 #1
0
        void CreateWallGraph()
        {
            Vector3 wallOffset = new Vector3(spacing / 2, 0, spacing / 2);

            wallGraph = new PositionalGraph(width + 1, height + 1, spacing, wallOffset);
            wallGraph.ConnectNodesWithinDistance(spacing);
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
        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());
        }
예제 #6
0
        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;
                        }
                    }
                }
            }
        }
예제 #7
0
 void CreatePathGraph()
 {
     pathGraph = new PositionalGraph(width, height, spacing);
 }
예제 #8
0
 public PlayerNavigationGraph(PositionalGraph mazeFloorGraph)
 {
     graph = new PositionalGraph();
     CreateNodes(mazeFloorGraph);
     ConnectNodes(mazeFloorGraph);
 }