示例#1
0
        /// <summary>
        /// Execute Graph in Setup mode, and do not do Build.
        /// </summary>
        /// <returns>The graph.</returns>
        /// <param name="target">Target.</param>
        /// <param name="graph">Graph.</param>
        public static ExecuteGraphResult ExecuteGraphSetup(BuildTarget target, Model.ConfigGraph graph)
        {
            AssetGraphController c = new AssetGraphController(graph);

            c.Perform(target, false, true, true, null);
            return(new ExecuteGraphResult(target, graph, c.Issues));
        }
示例#2
0
        private void MarkAndTraverseParent(Model.ConfigGraph saveData, Model.NodeData current, List <Model.ConnectionData> visitedConnections, List <Model.NodeData> visitedNode)
        {
//			Assert.IsNotNull(current);
            if (current == null)
            {
                return;
            }

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

                visitedConnections.Add(c);

                var parentNode = saveData.Nodes.Find(node => node.Id == c.FromNodeId);
                if (parentNode != null)
                {
                    // parentNode may be null while deleting node
                    MarkAndTraverseParent(saveData, parentNode, visitedConnections, visitedNode);
                }
            }

            visitedNode.Add(current);
        }
示例#3
0
        public void BuildGraphFromSaveData(Model.ConfigGraph graph, BuildTarget target, PerformGraph old)
        {
            m_target = target;

            ValidateLoopConnection(graph);

            m_nodes.Clear();
            m_streams.Clear();

            foreach (var n in graph.Nodes)
            {
                SetupNode(n);
            }

            foreach (var c in graph.Connections)
            {
                SetupStream(c);
            }

            /*
             * All nodes needs revisit when target has changed.
             * Do modification check only when targeting the same build target
             * from last one.
             */
            if (m_target == old.m_target)
            {
                CompareAndMarkModified(old);
            }
        }
示例#4
0
        public static Model.ConfigGraph ImportJSONToGraphFromDialog(Model.ConfigGraph graph)
        {
            string fileSelected = EditorUtility.OpenFilePanelWithFilters("Select JSON files to import", Application.dataPath, new string[] { "JSON files", "json", "All files", "*" });

            if (string.IsNullOrEmpty(fileSelected))
            {
                return(null);
            }

            string name = Path.GetFileNameWithoutExtension(fileSelected);

            var jsonContent = File.ReadAllText(fileSelected, System.Text.Encoding.UTF8);

            if (graph != null)
            {
                Undo.RecordObject(graph, "Import");
                EditorJsonUtility.FromJsonOverwrite(jsonContent, graph);
            }
            else
            {
                graph = ScriptableObject.CreateInstance <Model.ConfigGraph>();
                EditorJsonUtility.FromJsonOverwrite(jsonContent, graph);
                var newAssetFolder = CreateFolderForImportedAssets();
                var graphPath      = FileUtility.PathCombine(newAssetFolder, string.Format("{0}.asset", name));
                AssetDatabase.CreateAsset(graph, graphPath);
            }
            return(graph);
        }
示例#5
0
        /// <summary>
        /// Executes the graph.
        /// </summary>
        /// <returns>The graph.</returns>
        /// <param name="target">Target.</param>
        /// <param name="graph">Graph.</param>
        public static ExecuteGraphResult ExecuteGraph(BuildTarget target, Model.ConfigGraph graph, bool clearRecord = false, Action <Model.NodeData, string, float> updateHandler = null)
        {
            if (clearRecord)
            {
                AssetProcessEventRecord.GetRecord().Clear(false);
            }

            string assetPath = AssetDatabase.GetAssetPath(graph);

            LogUtility.Logger.LogFormat(LogType.Log, "Executing graph:{0}", assetPath);

            AssetGraphController c = new AssetGraphController(graph);

            // perform setup. Fails if any exception raises.
            c.Perform(target, false, true, true, null);

            // if there is error reported, then run
            if (c.IsAnyIssueFound)
            {
                return(new ExecuteGraphResult(target, graph, c.Issues));
            }

            Model.NodeData lastNodeData = null;
            float          lastProgress = 0.0f;

            Action <Model.NodeData, string, float> defaultUpdateHandler = (Model.NodeData node, string message, float progress) => {
                if (node != null && lastNodeData != node)
                {
                    lastNodeData = node;
                    lastProgress = progress;

                    LogUtility.Logger.LogFormat(LogType.Log, "Processing {0}", node.Name);
                }
                if (progress > lastProgress)
                {
                    if (progress <= 1.0f)
                    {
                        LogUtility.Logger.LogFormat(LogType.Log, "{0} Complete.", node.Name);
                    }
                    else if ((progress - lastProgress) > 0.2f)
                    {
                        LogUtility.Logger.LogFormat(LogType.Log, "{0}: {1} % : {2}", node.Name, (int)progress * 100f, message);
                    }
                    lastProgress = progress;
                }
            };

            if (updateHandler == null)
            {
                updateHandler = defaultUpdateHandler;
            }

            // run datas.
            c.Perform(target, true, true, true, updateHandler);

            AssetDatabase.Refresh();

            return(new ExecuteGraphResult(target, graph, c.Issues));
        }
 protected void SetLoaderPathToRootDirectory(Model.ConfigGraph graph)
 {
     foreach (var n in graph.Nodes.Where(n => n.Operation.ClassName.StartsWith(typeof(UnityEngine.AssetGraph.Loader).FullName + ",")))
     {
         var loader = n.Operation.Object as UnityEngine.AssetGraph.Loader;
         loader.LoadPath = RootFolder;
     }
 }
示例#7
0
        /*
         * Verify nodes does not create cycle
         */
        private void ValidateLoopConnection(Model.ConfigGraph saveData)
        {
            var leaf = saveData.CollectAllLeafNodes();

            foreach (var leafNode in leaf)
            {
                MarkAndTraverseParent(saveData, leafNode, new List <Model.ConnectionData>(), new List <Model.NodeData>());
            }
        }
示例#8
0
        private void Init(AssetGraphController c, Model.NodeData data)
        {
            m_nodeWindowId = 0;
            m_controller   = c;
            m_graph        = m_controller.TargetGraph;
            m_data         = data;
            name           = m_data.Name;

            m_baseRect = new Rect(m_data.X, m_data.Y, Model.Settings.GUI.NODE_BASE_WIDTH, Model.Settings.GUI.NODE_BASE_HEIGHT);

            m_nodeSyle = data.Operation.Object.InactiveStyle;
        }
示例#9
0
 public AssetGraphController(Model.ConfigGraph graph)
 {
     m_targetGraph    = graph;
     m_nodeExceptions = new List <NodeException>();
     m_streamManager  = new AssetReferenceStreamManager(m_targetGraph);
     m_performGraph   = new PerformGraph[] {
         new PerformGraph(m_streamManager),
         new PerformGraph(m_streamManager)
     };
     gIndex        = 0;
     m_currentNode = null;
 }
示例#10
0
        public GraphCollectionDetailTreeItem(string graphGuid) : base(++s_id, 0, string.Empty)
        {
            m_graphGuid = graphGuid;
            if (graphGuid != null)
            {
                var path = AssetDatabase.GUIDToAssetPath(m_graphGuid);
                m_graphName = Path.GetFileNameWithoutExtension(path);
                m_graph     = AssetDatabase.LoadAssetAtPath <Model.ConfigGraph> (path);

                this.displayName = GraphName;
            }
        }
示例#11
0
        public static ConfigGraph CreateNewGraphFromImport(string pathToSave)
        {
            // try load from v1.
            try {
                V1.SaveData v1       = V1.SaveData.Data;
                ConfigGraph newGraph = CreateNewGraph(pathToSave);
                newGraph.Import(v1);

                return(newGraph);
            } catch (Exception e) {
                LogUtility.Logger.LogError(LogUtility.kTag, "Failed to import graph from previous version." + e);
            }

            return(null);
        }
示例#12
0
        public static void ExportGraphToJSONFromDialog(Model.ConfigGraph graph)
        {
            string path =
                EditorUtility.SaveFilePanelInProject(
                    string.Format("Export {0} to JSON file", graph.name),
                    graph.name, "json",
                    "Export to:");

            if (string.IsNullOrEmpty(path))
            {
                return;
            }

            string jsonString = EditorJsonUtility.ToJson(graph, true);

            File.WriteAllText(path, jsonString, System.Text.Encoding.UTF8);

            AssetDatabase.Refresh();
        }
示例#13
0
        public override void OnInspectorGUI()
        {
            Model.ConfigGraph graph = target as Model.ConfigGraph;

            using (new EditorGUILayout.HorizontalScope()) {
                GUILayout.Label(graph.name, "BoldLabel");
                if (GUILayout.Button(Styles.kEDITBUTTON, GUILayout.Width(150f), GUILayout.ExpandWidth(false)))
                {
                    // Get the target we are inspecting and open the graph
                    var window = EditorWindow.GetWindow <AssetGraphEditorWindow>();
                    window.OpenGraph(graph);
                }
            }

            using (new EditorGUILayout.VerticalScope(GUI.skin.box)) {
                EditorGUILayout.LabelField("Version", graph.Version.ToString());
                EditorGUILayout.LabelField("Last Modified", graph.LastModified.ToString());
                GUILayout.Space(10f);

                var newOrder = EditorGUILayout.IntField("Execution Order", graph.ExecuteOrderPriority);
                if (newOrder != graph.ExecuteOrderPriority)
                {
                    graph.ExecuteOrderPriority = newOrder;
                }

                using (new EditorGUILayout.HorizontalScope()) {
                    GUIStyle wrapText = new GUIStyle(EditorStyles.textArea);
                    wrapText.wordWrap = true;

                    GUILayout.Label("Description", GUILayout.Width(100f));
                    string newdesc = EditorGUILayout.TextArea(graph.Descrption, wrapText);
                    if (newdesc != graph.Descrption)
                    {
                        graph.Descrption = newdesc;
                    }
                }
                GUILayout.Space(2f);
            }
        }
 public AssetReferenceStreamManager(Model.ConfigGraph graph)
 {
     m_connectionStreamMap = new Dictionary <string, Dictionary <string, List <AssetReference> > >();
     m_targetGraph         = graph;
 }
示例#15
0
 public GraphExecOrder(string guid, string name, Model.ConfigGraph graph)
 {
     m_graphGuid = guid;
     m_graphName = name;
     m_graph     = graph;
 }
示例#16
0
        /**
         * Build from commandline - entrypoint.
         */
        public static void BuildFromCommandline()
        {
            try {
                var arguments = new List <string>(System.Environment.GetCommandLineArgs());

                Application.SetStackTraceLogType(LogType.Log, StackTraceLogType.None);
                Application.SetStackTraceLogType(LogType.Error, StackTraceLogType.None);
                Application.SetStackTraceLogType(LogType.Warning, StackTraceLogType.None);

                BuildTarget target = EditorUserBuildSettings.activeBuildTarget;

                int targetIndex = arguments.FindIndex(a => a == "-target");

                if (targetIndex >= 0)
                {
                    var targetStr = arguments[targetIndex + 1];
                    LogUtility.Logger.Log("Target specified:" + targetStr);

                    var newTarget = BuildTargetUtility.BuildTargetFromString(arguments[targetIndex + 1]);
                    if (!BuildTargetUtility.IsBuildTargetSupported(newTarget))
                    {
                        throw new AssetGraphException(newTarget + " is not supported to build with this Unity. Please install platform support with installer(s).");
                    }

                    if (newTarget != target)
                    {
                                                #if UNITY_5_6 || UNITY_5_6_OR_NEWER
                        EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetUtility.TargetToGroup(newTarget), newTarget);
                                                #else
                        EditorUserBuildSettings.SwitchActiveBuildTarget(newTarget);
                                                #endif
                        target = newTarget;
                    }
                }

                int graphIndex      = arguments.FindIndex(a => a == "-graph");
                int collectionIndex = arguments.FindIndex(a => a == "-collection");

                if (graphIndex >= 0 && collectionIndex >= 0)
                {
                    LogUtility.Logger.Log("-graph and -collection can not be used at once. Aborting...");
                    return;
                }

                Model.ConfigGraph graph = null;

                if (graphIndex >= 0)
                {
                    var graphPath = arguments[graphIndex + 1];
                    LogUtility.Logger.Log("Graph path:" + graphPath);

                    graph = AssetDatabase.LoadAssetAtPath <Model.ConfigGraph>(graphPath);

                    LogUtility.Logger.Log("AssetReference bundle building for:" + BuildTargetUtility.TargetToHumaneString(target));

                    if (graph == null)
                    {
                        LogUtility.Logger.Log("Graph data not found. To specify graph to execute, use -graph [path]. Aborting...");
                        return;
                    }

                    var result = AssetGraphUtility.ExecuteGraph(target, graph);

                    if (result.IsAnyIssueFound)
                    {
                        LogUtility.Logger.Log("Building asset bundles terminated because of following errors. Please fix issues by opening editor.");
                        foreach (var e in result.Issues)
                        {
                            LogUtility.Logger.LogError(LogUtility.kTag, e.Reason);
                        }
                    }
                }

                if (collectionIndex >= 0)
                {
                    var collectionName = arguments[collectionIndex + 1];
                    LogUtility.Logger.Log("Collection Name:" + collectionName);

                    LogUtility.Logger.Log("AssetReference bundle building for:" + BuildTargetUtility.TargetToHumaneString(target));

                    if (collectionName == null)
                    {
                        LogUtility.Logger.Log("Collection name not specified. To specify collection to execute, use -collection [name]. Aborting...");
                        return;
                    }
                    BatchBuildConfig.GraphCollection c = BatchBuildConfig.GetConfig().Find(collectionName);
                    if (c == null)
                    {
                        LogUtility.Logger.Log("Collection not found. Please open project and configure graph collection. Aborting...");
                        return;
                    }

                    var result = AssetGraphUtility.ExecuteGraphCollection(target, c);

                    foreach (var r in result)
                    {
                        if (r.IsAnyIssueFound)
                        {
                            foreach (var e in r.Issues)
                            {
                                LogUtility.Logger.LogError(LogUtility.kTag, r.Graph.name + ":" + e.Reason);
                            }
                        }
                    }
                }
            } catch (Exception e) {
                LogUtility.Logger.LogError(LogUtility.kTag, e);
                LogUtility.Logger.LogError(LogUtility.kTag, "Building asset bundles terminated due to unexpected error.");
            } finally {
                LogUtility.Logger.Log("End of build.");
            }
        }
示例#17
0
 /// <summary>
 /// Execute Graph in Setup mode, and do not do Build.
 /// </summary>
 /// <returns>The graph.</returns>
 /// <param name="graph">Graph.</param>
 public static ExecuteGraphResult ExecuteGraphSetup(Model.ConfigGraph graph)
 {
     return(ExecuteGraphSetup(EditorUserBuildSettings.activeBuildTarget, graph));
 }
示例#18
0
 /// <summary>
 /// Executes the graph.
 /// </summary>
 /// <returns>The graph.</returns>
 /// <param name="graph">Graph.</param>
 public static ExecuteGraphResult ExecuteGraph(Model.ConfigGraph graph, bool clearRecord = false, Action <Model.NodeData, string, float> updateHandler = null)
 {
     return(ExecuteGraph(EditorUserBuildSettings.activeBuildTarget, graph, clearRecord, updateHandler));
 }
示例#19
0
 public ExecuteGraphResult(BuildTarget t, Model.ConfigGraph g, List <NodeException> i)
 {
     this.m_target = t;
     this.m_graph  = g;
     this.m_issues = i;
 }