예제 #1
0
        /*
         * 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>());
            }
        }
예제 #2
0
        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);
        }