public static Dictionary<ConnectionData, Dictionary<string, List<Asset>>> Perform(
SaveData saveData,
BuildTarget target,
bool isRun,
Action<NodeException> errorHandler,
Action<NodeData, float> updateHandler)
{
bool validateFailed = false;
try {
ValidateNameCollision(saveData);
ValidateLoopConnection(saveData);
} catch (NodeException e) {
errorHandler(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, errorHandler, updateHandler);
} else {
foreach(var inputPoint in leafNode.InputPoints) {
DoNodeOperation(target, leafNode, inputPoint, null, saveData, resultDict, cacheDict, performedIds, isRun, errorHandler, updateHandler);
}
}
}
}
return resultDict;
}