Ejemplo n.º 1
0
        /// <inheritdoc/>
        public override void Highlight(IEditorGameController controller, EditorServiceGame game, AssetItem assetItem, float duration)
        {
            var dependencies = DependencyManager.ComputeDependencies(assetItem.Id, AssetDependencySearchOptions.In, ContentLinkType.Reference);

            if (dependencies == null)
            {
                return;
            }
            foreach (var dependency in dependencies.LinksIn.Where(x => x.Item.Asset is MaterialAsset))
            {
                var referencer = assetItem.Package.Session.FindAsset(dependency.Item.Id);
                if (referencer == null)
                {
                    continue;
                }

                var material = controller.Loader.GetRuntimeObject <Material>(referencer);
                if (material != null)
                {
                    lock (highlightedMaterials)
                    {
                        highlightedMaterials[material] = DirectReferenceColor;
                    }
                    var currentMaterial = material;
                    controller.InvokeTask(() => HighlightMaterial(game, currentMaterial, duration));
                }
                var subDependencies = DependencyManager.ComputeDependencies(referencer.Id, AssetDependencySearchOptions.In | AssetDependencySearchOptions.Recursive, ContentLinkType.Reference);
                if (subDependencies == null)
                {
                    continue;
                }

                foreach (var subDependency in subDependencies.LinksIn.Where(x => x.Item.Asset is MaterialAsset))
                {
                    referencer = assetItem.Package.Session.FindAsset(subDependency.Item.Id);
                    if (referencer == null)
                    {
                        continue;
                    }

                    material = controller.Loader.GetRuntimeObject <Material>(referencer);
                    if (material != null)
                    {
                        lock (highlightedMaterials)
                        {
                            highlightedMaterials[material] = IndirectReferenceColor;
                        }
                        var currentMaterial = material;
                        controller.InvokeTask(() => HighlightMaterial(game, currentMaterial, duration));
                    }
                }
            }
        }