private static void MarkAndTraverseParent(SaveData saveData, NodeData current, List<ConnectionData> visitedConnections, List<NodeData> visitedNode)
{
// if node is visited from other route, just quit
if(visitedNode.Contains(current)) {
return;
}
var connectionsToParents = saveData.Connections.FindAll(con => con.ToNodeId == current.Id);
foreach(var c in connectionsToParents) {
if(visitedConnections.Contains(c)) {
throw new NodeException("Looped connection detected. Please fix connections to avoid loop.", current.Id);
}
var parentNode = saveData.Nodes.Find(node => node.Id == c.FromNodeId);
UnityEngine.Assertions.Assert.IsNotNull(parentNode);
visitedConnections.Add(c);
MarkAndTraverseParent(saveData, parentNode, visitedConnections, visitedNode);
}
visitedNode.Add(current);
}