示例#1
0
        public override bool OnAssetsReimported(
            Model.NodeData nodeData,
            AssetReferenceStreamManager streamManager,
            BuildTarget target,
            AssetPostprocessorContext ctx,
            bool isBuilding)
        {
            var samplingDirectoryPath = FileUtility.PathCombine(Model.Settings.Path.SavedSettingsPath, "ImportSettings", nodeData.Id);

            foreach (var importedAsset in ctx.ImportedAssets)
            {
                if (importedAsset.importFrom.StartsWith(samplingDirectoryPath))
                {
                    return(true);
                }
                // Test this later
//                if (m_customSettingAssetGuid != null) {
//                    if(imported.StartsWith(AssetDatabase.GUIDToAssetPath(m_customSettingAssetGuid))) {
//                        return true;
//                    }
//                }
            }

            return(false);
        }
 private void DoPostprocessWithContext(AssetPostprocessorContext ctx)
 {
     m_contexts.Push(ctx);
     NotifyAssetPostprocessorGraphs(ctx);
     AssetGraphEditorWindow.NotifyAssetsReimportedToAllWindows(ctx);
     m_contexts.Pop();
 }
示例#3
0
        public void OnAssetsReimported(AssetPostprocessorContext ctx)
        {
            // ignore asset reimport event during build
            if (m_isBuilding)
            {
                return;
            }

            if (m_targetGraph.Nodes == null)
            {
                return;
            }

            bool isAnyNodeAffected = false;

            foreach (var n in m_targetGraph.Nodes)
            {
                bool affected = n.Operation.Object.OnAssetsReimported(n, m_streamManager, m_lastTarget, ctx, false);
                if (affected)
                {
                    n.NeedsRevisit = true;
                }
                isAnyNodeAffected |= affected;
            }

            if (isAnyNodeAffected)
            {
                Perform(m_lastTarget, false, false, false, null);
            }
        }
示例#4
0
 /// <summary>
 /// OnAssetsReimported() is called when there are changes of assets during editing graph.
 /// </summary>
 /// <param name="nodeData">NodeGUI instance for this node.</param>
 /// <param name="streamManager">Manager instance to retrieve graph's incoming/outgoing group.</param>
 /// <param name="target">Target platform.</param>
 /// <param name="ctx">Reimport context.</param>
 public virtual bool OnAssetsReimported(
     Model.NodeData nodeData,
     AssetReferenceStreamManager streamManager,
     BuildTarget target,
     AssetPostprocessorContext ctx,
     bool isBuilding)
 {
     return(false);
 }
示例#5
0
        public override bool OnAssetsReimported(
            Model.NodeData nodeData,
            AssetReferenceStreamManager streamManager,
            BuildTarget target,
            AssetPostprocessorContext ctx,
            bool isBuilding)
        {
            if (isBuilding && !m_respondToAssetChange)
            {
                return(false);
            }

            CheckAndCorrectPath(target);
            var loadPath = GetLoadPath(target);

            foreach (var asset in ctx.ImportedAssets)
            {
                if (asset.importFrom.StartsWith(loadPath))
                {
                    return(true);
                }
            }

            foreach (var asset in ctx.MovedAssets)
            {
                if (asset.importFrom.StartsWith(loadPath))
                {
                    return(true);
                }
            }

            foreach (var path in ctx.MovedFromAssetPaths)
            {
                if (path.StartsWith(loadPath))
                {
                    return(true);
                }
            }

            foreach (var path in ctx.DeletedAssetPaths)
            {
                if (path.StartsWith(loadPath))
                {
                    return(true);
                }
            }

            return(false);
        }
        public override bool OnAssetsReimported(
            Model.NodeData nodeData,
            AssetReferenceStreamManager streamManager,
            BuildTarget target,
            AssetPostprocessorContext ctx,
            bool isBuilding)
        {
            if (isBuilding && !m_respondToAssetChange)
            {
                return(false);
            }

            if (m_searchFilter == null)
            {
                return(false);
            }

            var cond  = m_searchFilter[target];
            var guids = AssetDatabase.FindAssets(cond);

            if (guids.Length == 0)
            {
                return(false);
            }

            List <string> reimportedAssetGuids = new List <string> ();

            foreach (var a in ctx.ImportedAssets)
            {
                reimportedAssetGuids.Add(a.assetDatabaseId);
            }
            foreach (var a in ctx.MovedAssets)
            {
                reimportedAssetGuids.Add(a.assetDatabaseId);
            }

            foreach (var guid in guids)
            {
                if (reimportedAssetGuids.Contains(guid))
                {
                    return(true);
                }
            }

            return(false);
        }
示例#7
0
        public override bool OnAssetsReimported(
            Model.NodeData nodeData,
            AssetReferenceStreamManager streamManager,
            BuildTarget target,
            AssetPostprocessorContext ctx,
            bool isBuilding)
        {
            if (m_lastImportedAssets == null)
            {
                m_lastImportedAssets = new List <AssetReference> ();
            }

            m_lastImportedAssets.Clear();
            m_lastImportedAssets.AddRange(ctx.ImportedAssets);
            m_lastImportedAssets.AddRange(ctx.MovedAssets);

            return(true);
        }
        private void HandleAllAssets(string[] importedAssets,
                                     string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
        {
            for (int i = 0; i < movedFromAssetPaths.Length; i++)
            {
                if (movedFromAssetPaths[i] == DataModel.Version2.Settings.Path.BasePath)
                {
                    DataModel.Version2.Settings.Path.ResetBasePath(movedAssets[i]);
                }
            }

            foreach (string str in importedAssets)
            {
                AssetReferenceDatabase.GetReference(str).InvalidateTypeCache();
            }

            foreach (string str in deletedAssets)
            {
                AssetReferenceDatabase.DeleteReference(str);
            }

            for (int i = 0; i < movedAssets.Length; i++)
            {
                AssetReferenceDatabase.MoveReference(movedFromAssetPaths[i], movedAssets[i]);
            }

            var ctx = new AssetPostprocessorContext(importedAssets, deletedAssets, movedAssets, movedFromAssetPaths, m_contexts);

            if (!ctx.HasValidAssetToPostprocess())
            {
                return;
            }

            // if modification happens inside graph, record it.
            if (m_controllers.Count > 0)
            {
                m_ppQueue.Enqueue(ctx);
                return;
            }

            DoPostprocessWithContext(ctx);
        }
        public void AddModifiedAsset(AssetReference a)
        {
            AssetPostprocessorContext ctx = null;

            if (m_contexts.Count == 0)
            {
                ctx = new AssetPostprocessorContext();
                m_contexts.Push(ctx);
            }
            else
            {
                ctx = m_contexts.Peek();
            }

            if (!ctx.ImportedAssets.Contains(a))
            {
                ctx.ImportedAssets.Add(a);
            }

            AssetProcessEventRecord.GetRecord().LogModify(a.assetDatabaseId);
        }
 public void PushContext(AssetPostprocessorContext c)
 {
     m_contexts.Push(c);
 }
        private void NotifyAssetPostprocessorGraphs(AssetPostprocessorContext ctx)
        {
            var guids = AssetDatabase.FindAssets(Model.Settings.GRAPH_SEARCH_CONDITION);

            var executingGraphs = new List <Model.ConfigGraph> ();

            foreach (var guid in guids)
            {
                string path  = AssetDatabase.GUIDToAssetPath(guid);
                var    graph = AssetDatabase.LoadAssetAtPath <Model.ConfigGraph>(path);
                if (graph != null && graph.UseAsAssetPostprocessor)
                {
                    bool isAnyNodeAffected = false;
                    foreach (var n in graph.Nodes)
                    {
                        isAnyNodeAffected |= n.Operation.Object.OnAssetsReimported(n, null, EditorUserBuildSettings.activeBuildTarget, ctx, true);
                    }
                    if (isAnyNodeAffected)
                    {
                        executingGraphs.Add(graph);
                    }
                }
            }

            if (executingGraphs.Count > 0)
            {
                if (executingGraphs.Count > 1)
                {
                    executingGraphs.Sort((l, r) => l.ExecuteOrderPriority - r.ExecuteOrderPriority);
                }

                float          currentCount            = 0f;
                float          totalCount              = (float)executingGraphs.Sum(g => g.Nodes.Count);
                Model.NodeData lastNode                = null;
                float          graphStartTime          = Time.realtimeSinceStartup;
                bool           progressbarDisplayed    = false;
                float          progressBarShowDelaySec = 0.3f;

                Action <Model.NodeData, string, float> updateHandler = (node, message, progress) => {
                    if (lastNode != node)
                    {
                        // do not add count on first node visit to
                        // calcurate percantage correctly
                        if (lastNode != null)
                        {
                            ++currentCount;
                        }
                        lastNode = node;

                        if (!progressbarDisplayed)
                        {
                            if (Time.realtimeSinceStartup - graphStartTime > progressBarShowDelaySec)
                            {
                                progressbarDisplayed = true;
                            }
                        }
                    }

                    if (progressbarDisplayed)
                    {
                        var graphName = GetCurrentGraphController().TargetGraph.GetGraphName();

                        float currentNodeProgress  = progress * (1.0f / totalCount);
                        float currentTotalProgress = (currentCount / totalCount) + currentNodeProgress;

                        string title = string.Format("Building {2}[{0}/{1}]", currentCount, totalCount, graphName);
                        string info  = $"Processing {node.Name}:{message}";

                        EditorUtility.DisplayProgressBar(title, info, currentTotalProgress);
                    }
                };

                foreach (var g in executingGraphs)
                {
                    AssetGraphUtility.ExecuteGraph(g, false, updateHandler);
                }

                if (progressbarDisplayed)
                {
                    EditorUtility.ClearProgressBar();
                }

                AssetDatabase.Refresh();
            }
        }