Exemplo n.º 1
0
        private void GetDependenciesForAssetsInResolver(HashSet <string> changedAssets, IAssetDependencyResolver resolver, Dictionary <string, FileToAssetNode> resultList, ProgressBase progress)
        {
            string resolverId = resolver.GetId();

            foreach (string assetId in changedAssets)
            {
                string fileId = NodeDependencyLookupUtility.GetGuidFromAssetId(assetId);

                if (!resultList.ContainsKey(fileId))
                {
                    resultList.Add(fileId, new FileToAssetNode {
                        FileId = fileId
                    });
                }

                FileToAssetNode fileToAssetNode = resultList[fileId];
                AssetNode       assetNode       = fileToAssetNode.GetAssetNode(assetId);

                List <Dependency> dependencies = new List <Dependency>();

                resolver.GetDependenciesForId(assetId, dependencies);

                AssetNode.ResolverData resolverData = assetNode.GetResolverData(resolverId);

                resolverData.Dependencies = dependencies;

                fileToAssetNode.GetResolverTimeStamp(resolverId).TimeStamp =
                    NodeDependencyLookupUtility.GetTimeStampForFileId(fileId);
            }
        }
        public static FileToAssetNode[] Deserialize(byte[] bytes)
        {
            int offset = 0;
            int numFileToAssetNodes = CacheSerializerUtils.DecodeShort(ref bytes, ref offset);

            FileToAssetNode[] fileToAssetNodes = new FileToAssetNode[numFileToAssetNodes];

            for (int n = 0; n < numFileToAssetNodes; ++n)
            {
                string          fileId        = CacheSerializerUtils.DecodeString(ref bytes, ref offset);
                FileToAssetNode fileAssetNode = new FileToAssetNode {
                    FileId = fileId
                };
                int resolverTimeStampLength = CacheSerializerUtils.DecodeShort(ref bytes, ref offset);

                for (var i = 0; i < resolverTimeStampLength; i++)
                {
                    FileToAssetNode.ResolverTimeStamp resolverTimeStamp = new FileToAssetNode.ResolverTimeStamp();
                    resolverTimeStamp.ResolverId = CacheSerializerUtils.DecodeString(ref bytes, ref offset);
                    resolverTimeStamp.TimeStamp  = CacheSerializerUtils.DecodeLong(ref bytes, ref offset);
                    fileAssetNode.ResolverTimeStamps.Add(resolverTimeStamp);
                }

                int numAssetNodes = CacheSerializerUtils.DecodeShort(ref bytes, ref offset);

                for (var i = 0; i < numAssetNodes; i++)
                {
                    string    assetId   = CacheSerializerUtils.DecodeString(ref bytes, ref offset);
                    AssetNode assetNode = new AssetNode(assetId);

                    int numResolverDatas = CacheSerializerUtils.DecodeShort(ref bytes, ref offset);

                    for (int j = 0; j < numResolverDatas; ++j)
                    {
                        AssetNode.ResolverData data = new AssetNode.ResolverData();

                        data.ResolverId   = CacheSerializerUtils.DecodeString(ref bytes, ref offset);
                        data.Dependencies = CacheSerializerUtils.DecodeDependencies(ref bytes, ref offset);

                        assetNode.ResolverDatas.Add(data);
                    }

                    fileAssetNode.AssetNodes.Add(assetNode);
                }

                fileToAssetNodes[n] = fileAssetNode;
            }

            string eof = CacheSerializerUtils.DecodeString(ref bytes, ref offset);

            if (!eof.Equals(EOF))
            {
                Debug.LogError("AssetDependencyCache cache file to be corrupted. Rebuilding cache required");
                return(new FileToAssetNode[0]);
            }

            return(fileToAssetNodes);
        }
Exemplo n.º 3
0
        private HashSet <string> GetChangedAssetIdsForResolver(IAssetDependencyResolver resolver, string[] pathes, long[] timestamps, FileToAssetNode[] fileToAssetNodes)
        {
            HashSet <string> result = new HashSet <string>();
            Dictionary <string, FileToAssetNode> list = RelationLookup.RelationLookupBuilder.ConvertToDictionary(fileToAssetNodes);
            string id = resolver.GetId();
            string progressBarTitle = $"AssetDependencyCache: {id}";

            float lastDisplayedPercentage = 0;

            for (int i = 0; i < pathes.Length; ++i)
            {
                float progressPercentage = (float)i / pathes.Length;

                if (progressPercentage - lastDisplayedPercentage > 0.01f)
                {
                    EditorUtility.DisplayProgressBar(progressBarTitle, $"Finding changed assets {result.Count}", (float)i / pathes.Length);
                    lastDisplayedPercentage = progressPercentage;
                }

                string path = pathes[i];
                string guid = AssetDatabase.AssetPathToGUID(path);

                if (!resolver.IsGuidValid(guid))
                {
                    continue;
                }

                if (list.ContainsKey(guid))
                {
                    FileToAssetNode fileToAssetNode = list[guid];
                    foreach (AssetNode assetNode in fileToAssetNode.AssetNodes)
                    {
                        assetNode.Existing = true;
                    }

                    if (fileToAssetNode.GetResolverTimeStamp(id).TimeStamp != timestamps[i])
                    {
                        NodeDependencyLookupUtility.AddAssetsToList(result, path);
                    }
                }
                else
                {
                    NodeDependencyLookupUtility.AddAssetsToList(result, path);
                }
            }

            return(result);
        }
Exemplo n.º 4
0
        private bool CheckNeedsUpdateForResolver(IAssetDependencyResolver resolver, string[] pathes, long[] timestamps, FileToAssetNode[] fileToAssetNodes)
        {
            Dictionary <string, FileToAssetNode> list = RelationLookup.RelationLookupBuilder.ConvertToDictionary(fileToAssetNodes);
            string id = resolver.GetId();

            string progressBarTitle = $"AssetDependencyCache: {id}";

            for (int i = 0; i < pathes.Length; ++i)
            {
                EditorUtility.DisplayProgressBar(progressBarTitle, "Checking for required update", (float)i / pathes.Length);
                string path = pathes[i];
                string guid = AssetDatabase.AssetPathToGUID(path);

                if (!resolver.IsGuidValid(guid))
                {
                    continue;
                }

                if (list.ContainsKey(guid))
                {
                    FileToAssetNode fileToAssetNode = list[guid];
                    foreach (AssetNode assetNode in fileToAssetNode.AssetNodes)
                    {
                        assetNode.Existing = true;
                    }

                    if (fileToAssetNode.GetResolverTimeStamp(id).TimeStamp != timestamps[i])
                    {
                        return(true);
                    }
                }
                else
                {
                    return(true);
                }
            }

            return(false);
        }