/* * Verify nodes does not create cycle */ private void ValidateLoopConnection(SaveData saveData) { var leaf = saveData.CollectAllLeafNodes(); foreach (var leafNode in leaf) { MarkAndTraverseParent(saveData, leafNode, new List <ConnectionData>(), new List <NodeData>()); } }
Perform( SaveData saveData, BuildTarget target, bool isRun, Action <NodeData, float> updateHandler = null ) { bool validateFailed = false; try { ValidateNameCollision(saveData); ValidateLoopConnection(saveData); } catch (NodeException e) { AssetBundleGraphEditorWindow.AddNodeException(e); validateFailed = true; } var resultDict = new Dictionary <ConnectionData, Dictionary <string, List <Asset> > >(); var performedIds = new List <string>(); var cacheDict = new Dictionary <NodeData, List <string> >(); // if validation failed, node may contain looped connections, so we are not going to // go into each operations. if (!validateFailed) { var leaf = saveData.CollectAllLeafNodes(); foreach (var leafNode in leaf) { if (leafNode.InputPoints.Count == 0) { DoNodeOperation(target, leafNode, null, null, saveData, resultDict, cacheDict, performedIds, isRun, updateHandler); } else { foreach (var inputPoint in leafNode.InputPoints) { DoNodeOperation(target, leafNode, inputPoint, null, saveData, resultDict, cacheDict, performedIds, isRun, updateHandler); } } } } return(resultDict); }