//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); }
/// <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); } }