private void CollectInputReferences(AssetDependencies dependencyRoot, AssetId assetId, HashSet <AssetId> visited, bool recursive, ContentLinkType linkTypes, ref int count) { if (visited != null) { if (visited.Contains(assetId)) { return; } visited.Add(assetId); } count++; AssetDependencies dependencies; Dependencies.TryGetValue(assetId, out dependencies); if (dependencies != null) { foreach (var pair in dependencies.LinksIn) { if ((linkTypes & pair.Type) != 0) { dependencyRoot.AddLinkIn(pair); if (visited != null && recursive) { CollectInputReferences(dependencyRoot, pair.Item.Id, visited, true, linkTypes, ref count); } } } } }
private void UpdateMissingDependencies(AssetDependencies dependencies) { HashSet <AssetDependencies> parentDependencyItems; // If the asset has any missing dependencies, update the fast lookup tables if (dependencies.HasMissingDependencies) { AssetsWithMissingReferences[dependencies.Item.Id] = dependencies; foreach (var assetLink in dependencies.BrokenLinksOut) { if (!MissingReferencesToParent.TryGetValue(assetLink.Element.Id, out parentDependencyItems)) { parentDependencyItems = new HashSet <AssetDependencies>(); MissingReferencesToParent.Add(assetLink.Element.Id, parentDependencyItems); } parentDependencyItems.Add(dependencies); } } var item = dependencies.Item; // If the new asset was a missing reference, remove all missing references for this asset if (MissingReferencesToParent.TryGetValue(item.Id, out parentDependencyItems)) { MissingReferencesToParent.Remove(item.Id); foreach (var parentDependencies in parentDependencyItems) { // Remove missing dependency from parent var oldBrokenLink = parentDependencies.RemoveBrokenLinkOut(item.Id); // Update [Out] dependency to parent parentDependencies.AddLinkOut(item, oldBrokenLink.Type); // Update [In] dependency to current dependencies.AddLinkIn(parentDependencies.Item, oldBrokenLink.Type); // Remove global cache for assets with missing references if (!parentDependencies.HasMissingDependencies) { AssetsWithMissingReferences.Remove(parentDependencies.Item.Id); } } } }