public virtual void OnAfterDeserialize()
        {
            //Debug.LogError("OnAfterDeserialize Parents.Count:" + ParentPaths.Count);
            //Debug.LogError("OnAfterDeserialize Childrens.Count:" + ChildrenPaths.Count);
            Childrens.Clear();
            Parents.Clear();
            LastUpdateTimes.Clear();
            Dictionary <int, string> dict = new Dictionary <int, string>();
            int pathCount = UpdateTimes.Count;

            for (int i = 0; i < pathCount; i++)
            {
                dict.Add(i, Paths[i]);
                LastUpdateTimes.Add(Paths[i], new DateTime(UpdateTimes[i]));
            }
            int childrenCount = ChildrenPaths.Count;
            int index         = 0;

            for (int i = 0; i < childrenCount; i++)
            {
                UStringList list = new UStringList();
                for (; ChildrenDepends[index] >= 0; index++)
                {
                    list.Add(dict[ChildrenDepends[index]]);
                }
                index++;
                Childrens.Add(dict[ChildrenPaths[i]], list);
            }
            Debug.Assert(index == ChildrenDepends.Count);
            int parnetCount = ParentPaths.Count;

            index = 0;
            for (int i = 0; i < parnetCount; i++)
            {
                UStringList list = new UStringList();
                for (; ParentDepends[index] >= 0; index++)
                {
                    list.Add(dict[ParentDepends[index]]);
                }
                index++;
                Parents.Add(dict[ParentPaths[i]], list);
            }
            Debug.Assert(index == ParentDepends.Count);
        }
예제 #2
0
        public override void Load()
        {
            EditorUtility.DisplayCancelableProgressBar("Hold on", "", 0);
            AssetDatabase.SaveAssets();
            string[]         allAsset     = AssetDatabase.GetAllAssetPaths();
            HashSet <string> removedPaths = new HashSet <string>(LastUpdateTimes.Keys);

            removedPaths.ExceptWith(allAsset);
            Debug.Log(removedPaths.Count);
            foreach (var path in removedPaths)
            {
                if (Childrens.ContainsKey(path))
                {
                    foreach (var p in Childrens[path])
                    {
                        if (Parents.ContainsKey(p))
                        {
                            Parents[p].Remove(path);
                        }
                    }
                    Childrens.Remove(path);
                }
                if (Parents.ContainsKey(path))
                {
                    foreach (var p in Parents[path])
                    {
                        if (Childrens.ContainsKey(p))
                        {
                            Childrens[p].Remove(path);
                        }
                    }
                    Parents.Remove(path);
                }
                LastUpdateTimes.Remove(path);
            }
            int count = allAsset.Length;

            for (int i = 0; i < count; i++)
            {
                if (i % 100 == 0)
                {
                    if (EditorUtility.DisplayCancelableProgressBar("Hold on", "GetDependencies " + i + "/" + count, (float)i / count))
                    {
                        EditorUtility.ClearProgressBar();
                        return;
                    }
                }
                string p    = allAsset[i];
                var    time = File.GetLastWriteTime(p);
                if (!LastUpdateTimes.ContainsKey(p) || LastUpdateTimes[p] < time)
                {
                    if (Childrens.ContainsKey(p))
                    {
                        foreach (var ps in Childrens[p])
                        {
                            if (Parents.ContainsKey(ps))
                            {
                                Parents[ps].Remove(p);
                            }
                        }
                    }
                    var dp = AssetDatabase.GetDependencies(p, false);
                    Childrens[p] = new UStringList();
                    Childrens[p].AddRange(dp);
                    Childrens[p].Remove(p);
                    foreach (var d in dp)
                    {
                        if (d == p)
                        {
                            continue;
                        }
                        if (!Parents.ContainsKey(d))
                        {
                            Parents.Add(d, new UStringList());
                        }
                        Parents[d].Remove(p);
                        Parents[d].Add(p);
                    }
                    LastUpdateTimes[p] = time;
                }
            }
            EditorUtility.SetDirty(this);
            AssetDatabase.SaveAssets();
            EditorUtility.ClearProgressBar();
        }