Exemplo n.º 1
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;
            }
        }
        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);
        }
Exemplo n.º 4
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;
                        }
                    }
                }
            }
        }