コード例 #1
0
        public static NodeNetworkSave FromNodeNetwork(FlatRedBall.AI.Pathfinding.NodeNetwork nodeNetwork)
        {
            NodeNetworkSave nodeNetworkSave = new NodeNetworkSave();

            foreach (FlatRedBall.AI.Pathfinding.PositionedNode positionedNode in nodeNetwork.Nodes)
            {
                nodeNetworkSave.PositionedNodes.Add(
                    PositionedNodeSave.FromPositionedNode(positionedNode));
            }

            return(nodeNetworkSave);
        }
コード例 #2
0
        public FlatRedBall.AI.Pathfinding.NodeNetwork ToNodeNetwork(out string errors)
        {
            errors = null;

            FlatRedBall.AI.Pathfinding.NodeNetwork nodeNetwork = new FlatRedBall.AI.Pathfinding.NodeNetwork();

            foreach (PositionedNodeSave nodeSave in PositionedNodes)
            {
                PositionedNode node = nodeSave.ToPositionedNode();

                nodeNetwork.AddNode(node);
            }

            List<PositionedNode> nodesAlreadyLinked =
                new List<PositionedNode>(PositionedNodes.Count);

            // Now that all of the nodes are set up, reestablish the links
            for (int i = 0; i < PositionedNodes.Count; i++)
            {
                foreach (LinkSave linkSave in PositionedNodes[i].Links)
                {
                    if (linkSave.NodeLinkingTo == PositionedNodes[i].Name)
                    {
                        string nodeName = PositionedNodes[i].Name;
                        if (string.IsNullOrEmpty(nodeName))
                        {
                            nodeName = "<UNNAMED>";
                        }
                        errors += "The node " + nodeName + " has a link to itself.\n";
                        break;
                    }
                    else
                    {
                        PositionedNode node = nodeNetwork.FindByName(linkSave.NodeLinkingTo);

                        if (nodesAlreadyLinked.Contains(node) == false)
                        {

                            nodeNetwork.Nodes[i].LinkTo(node, linkSave.Cost);

                        }
                    }
                }
                nodesAlreadyLinked.Add(nodeNetwork.Nodes[i]);
            }

            return nodeNetwork;

        }
コード例 #3
0
        public FlatRedBall.AI.Pathfinding.NodeNetwork ToNodeNetwork(out string errors)
        {
            errors = null;

            FlatRedBall.AI.Pathfinding.NodeNetwork nodeNetwork = new FlatRedBall.AI.Pathfinding.NodeNetwork();

            foreach (PositionedNodeSave nodeSave in PositionedNodes)
            {
                PositionedNode node = nodeSave.ToPositionedNode();

                nodeNetwork.AddNode(node);
            }

            List <PositionedNode> nodesAlreadyLinked =
                new List <PositionedNode>(PositionedNodes.Count);

            // Now that all of the nodes are set up, reestablish the links
            for (int i = 0; i < PositionedNodes.Count; i++)
            {
                foreach (LinkSave linkSave in PositionedNodes[i].Links)
                {
                    if (linkSave.NodeLinkingTo == PositionedNodes[i].Name)
                    {
                        string nodeName = PositionedNodes[i].Name;
                        if (string.IsNullOrEmpty(nodeName))
                        {
                            nodeName = "<UNNAMED>";
                        }
                        errors += "The node " + nodeName + " has a link to itself.\n";
                        break;
                    }
                    else
                    {
                        PositionedNode node = nodeNetwork.FindByName(linkSave.NodeLinkingTo);

                        if (nodesAlreadyLinked.Contains(node) == false)
                        {
                            nodeNetwork.Nodes[i].LinkTo(node, linkSave.Cost);
                        }
                    }
                }
                nodesAlreadyLinked.Add(nodeNetwork.Nodes[i]);
            }

            return(nodeNetwork);
        }