Esempio n. 1
0
    //Copy Godot-side hierarchy information over into "student safe" data containers
    GalaxyMapData GenerateGalaxyMapData()
    {
        //Data copies for GalaxyMapNodes
        var nodeDataToReturn = new List <GalaxyMapNodeData>();

        foreach (Node2D node in Nodes)
        {
            var newNodeData = new GalaxyMapNodeData();
            newNodeData.systemName       = node.Name;
            newNodeData.galacticPosition = node.Position;
            nodeDataToReturn.Add(newNodeData);
        }

        //Data copies for GalaxyMapEdges
        var edgeDataToReturn = new List <GalaxyMapEdgeData>();

        foreach (GalaxyMapEdge edge in Edges)
        {
            var newEdgeData = new GalaxyMapEdgeData();
            newEdgeData.edgeCost = edge.EdgeCost;

            foreach (var nodeData in nodeDataToReturn)
            {
                if (nodeData.systemName == edge.NodeA.Name)
                {
                    newEdgeData.nodeA = nodeData;
                }

                if (nodeData.systemName == edge.NodeB.Name)
                {
                    newEdgeData.nodeB = nodeData;
                }
            }

            edgeDataToReturn.Add(newEdgeData);
        }

        //Let each NodeData know about relevant EdgeData
        foreach (var node in nodeDataToReturn)
        {
            List <GalaxyMapEdgeData> edges = new List <GalaxyMapEdgeData>();
            foreach (var edge in edgeDataToReturn)
            {
                if (edge.nodeA == node || edge.nodeB == node)
                {
                    edges.Add(edge);
                }
            }
            node.edges = edges.ToArray();
        }

        //Package the data up and return it to the caller
        GalaxyMapData dataToReturn = new GalaxyMapData();

        dataToReturn.nodeData = nodeDataToReturn.ToArray();
        dataToReturn.edgeData = edgeDataToReturn.ToArray();
        return(dataToReturn);
    }
Esempio n. 2
0
 /// <summary>
 /// Convenience function for returning the other node given one of either nodeA or nodeB for this edge.
 /// Returns null if passed a node that doesn't belong to this edge.
 /// </summary>
 /// <param name="startNode"></param>
 /// <returns></returns>
 public GalaxyMapNodeData GetOtherNode(GalaxyMapNodeData startNode)
 {
     if (startNode == nodeA)
     {
         return(nodeB);
     }
     else if (startNode == nodeB)
     {
         return(nodeA);
     }
     else
     {
         return(null);
     }
 }