Пример #1
0
 static AssetDeleteResult OnWillDeleteAsset(string assetName, RemoveAssetOptions removeAssetOptions)
 {
     if (Data.IsUpToDate)
     {
         AssetReferenceViewer.RemoveAssetFromDatabase(assetName);
         AssetReferenceViewer.SaveDatabase();
     }
     return(AssetDeleteResult.DidNotDelete);
 }
Пример #2
0
 void IHasCustomMenu.AddItemsToMenu(GenericMenu menu)
 {
     menu.AddItem(new GUIContent("Rebuild Database"), false, () =>
     {
         AssetReferenceViewer.RebuildDatabase();
         Initialize();
     });
     menu.AddItem(new GUIContent("Clear Database"), false, AssetReferenceViewer.ClearDatabase);
     menu.AddItem(new GUIContent("Project Overlay"), WindowOverlay.Enabled, () => { WindowOverlay.Enabled = !WindowOverlay.Enabled; });
 }
Пример #3
0
 static void OnWillCreateAsset(string assetName)
 {
     if (Data.IsUpToDate)
     {
         Actions.Enqueue(() => {
             AssetReferenceViewer.AddAssetToDatabase(assetName);
             AssetReferenceViewer.SaveDatabase();
         });
     }
 }
 private static void ProjectWindowItemOnGUI(string guid, Rect rect)
 {
     if (enabled)
     {
         AssetInfo assetInfo = AssetReferenceViewer.GetAsset(AssetDatabase.GUIDToAssetPath(guid));
         if (assetInfo != null)
         {
             var content = new GUIContent(assetInfo.IsIncludedInBuild ? ProjectIcons.LinkBlue : ProjectIcons.LinkBlack, assetInfo.IncludedStatus.ToString());
             GUI.Label(new Rect(rect.width + rect.x - 20, rect.y + 1, 16, 16), content);
         }
     }
 }
Пример #5
0
 static AssetMoveResult OnWillMoveAsset(string sourcePath, string destinationPath)
 {
     if (Data.IsUpToDate)
     {
         Actions.Enqueue(() => {
             AssetReferenceViewer.RemoveAssetFromDatabase(sourcePath);
             AssetReferenceViewer.AddAssetToDatabase(destinationPath);
             AssetReferenceViewer.SaveDatabase();
         });
     }
     return(AssetMoveResult.DidNotMove);
 }
Пример #6
0
 static string[] OnWillSaveAssets(string[] paths)
 {
     if (Data.IsUpToDate)
     {
         Actions.Enqueue(() => {
             foreach (string path in paths)
             {
                 AssetReferenceViewer.RemoveAssetFromDatabase(path);
                 AssetReferenceViewer.AddAssetToDatabase(path);
             }
             AssetReferenceViewer.SaveDatabase();
         });
     }
     return(paths);
 }
Пример #7
0
        public void Initialize(Object current)
        {
            contentViewContainer.Clear();

            if (current == null)
            {
                return;
            }

            var curNode = new NodeMaker(current);

            curNode.Q("node-border").style.borderLeftColor   = NodeMaker.CurBorderColor;
            curNode.Q("node-border").style.borderRightColor  = NodeMaker.CurBorderColor;
            curNode.Q("node-border").style.borderBottomColor = NodeMaker.CurBorderColor;
            curNode.Q("node-border").style.borderTopColor    = NodeMaker.CurBorderColor;
            AddElement(curNode);

            const int offsetH           = 600;
            const int deltaV            = 260;
            AssetInfo selectedAssetInfo = AssetReferenceViewer.GetAsset(AssetDatabase.GetAssetPath(current));

            if (selectedAssetInfo != null)
            {
                var i = 0;

                {
                    var  deps = selectedAssetInfo.dependencies;
                    var  half = deps.Count / 2;
                    bool even = deps.Count % 2 == 0;

                    foreach (var d in deps)
                    {
                        var item = d;
                        var obj  = AssetDatabase.LoadAssetAtPath(item, typeof(Object));
                        if (obj == null)
                        {
                            AssetReferenceViewer.RebuildDatabase();
                            return;
                        }
                        else
                        {
                            var node = new NodeMaker(obj);
                            node.style.left = -offsetH;
                            node.style.top  = (i - half) * deltaV + (even ? deltaV / 2 : 0);

                            node.AddManipulator(new DoubleClickManipulator(() =>
                            {
                                Selection.activeObject = obj;
                                Initialize(obj);
                            }));

                            AddElement(node);

                            var edge = curNode.InPort.ConnectTo(node.OutPort);
                            AddElement(edge);
                        }

                        i++;
                    }

                    i = 0;
                }

                {
                    var  refs = selectedAssetInfo.references;
                    var  half = refs.Count / 2;
                    bool even = refs.Count % 2 == 0;
                    foreach (var r in refs)
                    {
                        var item = r;
                        var path = string.Join("/", item);
                        var obj  = AssetDatabase.LoadAssetAtPath(path, typeof(Object));
                        if (obj == null)
                        {
                            Debug.LogError(item);
                        }
                        else
                        {
                            var node = new NodeMaker(obj);
                            node.style.left = offsetH;
                            node.style.top  = (i - half) * deltaV + (even ? deltaV / 2 : 0);

                            node.AddManipulator(new DoubleClickManipulator(() =>
                            {
                                Selection.activeObject = obj;
                                Initialize(obj);
                            }));

                            AddElement(node);

                            var edge = curNode.OutPort.ConnectTo(node.InPort);
                            AddElement(edge);
                        }

                        i++;
                    }
                }
            }
        }
Пример #8
0
        private void Initialize()
        {
            if (Selection.activeObject == null)
            {
                return;
            }

            visualTree = Resources.Load <VisualTreeAsset>("AssetReferenceViewer");
            var rootView = rootVisualElement;
            var root     = visualTree.CloneTree().Q <VisualElement>("Root");

            rootView.Clear();
            rootView.Add(root);

            graphViewer = new GraphViewer();
            graphViewer.Initialize(Selection.activeObject);
            var graph = rootView.Q <VisualElement>("Graph");

            graph.Add(graphViewer);

            var helpBox = root.Q <VisualElement>("HelpBox");

            helpBox.style.display = DisplayStyle.None;

            string selectedPath = AssetDatabase.GetAssetPath(Selection.activeObject);

            var objName = root.Q <Label>("ObjName");

            objName.text = Selection.activeObject.name;
            var objPath = root.Q <Label>("Path");

            objPath.text = selectedPath;
            var icon = root.Q <VisualElement>("AssetIcon");

            icon.style.backgroundImage = new StyleBackground((Texture2D)AssetDatabase.GetCachedIcon(selectedPath));

            if (!selectedPath.StartsWith("Assets/"))
            {
                var helpB = new HelpBox("This asset is outside Assets folder or you selected something in the scene", HelpBoxMessageType.Warning);
                graphViewer.Add(helpB);
                return;
            }

            var scroll = root.Q <ScrollView>("Scroll");

            if (Directory.Exists(selectedPath))
            {
                return;
            }

            AssetInfo selectedAssetInfo = AssetReferenceViewer.GetAsset(selectedPath);

            if (selectedAssetInfo == null)
            {
                AssetReferenceViewer.RebuildDatabase();
                EditorApplication.delayCall = Initialize;
                return;
            }

            var buildStatusIcon = root.Q <VisualElement>("BuildStatusIcon");

            buildStatusIcon.style.backgroundImage =
                selectedAssetInfo.IsIncludedInBuild ? ProjectIcons.LinkBlue : ProjectIcons.LinkBlack;
            buildStatusIcon.tooltip = selectedAssetInfo.IncludedStatus.ToString();

            var dependenciesFoldout = root.Q <Foldout>("Dependencies");

            dependenciesFoldout.Clear();
            dependenciesFoldout.text = "Dependencies (" + selectedAssetInfo.dependencies.Count + ")";
            scroll.Add(dependenciesFoldout);
            var referencesFoldout = root.Q <Foldout>("References");

            referencesFoldout.Clear();
            referencesFoldout.text = "References (" + selectedAssetInfo.references.Count + ")";
            scroll.Add(referencesFoldout);

            foreach (var d in selectedAssetInfo.dependencies)
            {
                var item        = visualTree.CloneTree().Q <VisualElement>("Item");
                var itemIcon    = item.Q <VisualElement>("ItemIcon");
                var itemLabel   = item.Q <Label>("ItemLabel");
                var inBuildIcon = item.Q <VisualElement>("InBuildIcon");

                itemLabel.text = Path.GetFileName(d);
                item.RegisterCallback <MouseUpEvent>(e =>
                {
                    Selection.activeObject = AssetDatabase.LoadAssetAtPath <Object>(d);
                });
                itemIcon.style.backgroundImage = AssetDatabase.GetCachedIcon(d) as Texture2D;
                AssetInfo depInfo = AssetReferenceViewer.GetAsset(d);
                inBuildIcon.style.backgroundImage =
                    depInfo.IsIncludedInBuild ? ProjectIcons.LinkBlue : ProjectIcons.LinkBlack;
                inBuildIcon.tooltip = depInfo.IncludedStatus.ToString();
                item.style.display  = DisplayStyle.Flex;
                dependenciesFoldout.contentContainer.Add(item);
            }

            foreach (var r in selectedAssetInfo.references)
            {
                var item        = visualTree.CloneTree().Q <VisualElement>("Item");
                var itemIcon    = item.Q <VisualElement>("ItemIcon");
                var itemLabel   = item.Q <Label>("ItemLabel");
                var inBuildIcon = item.Q <VisualElement>("InBuildIcon");

                itemLabel.text = Path.GetFileName(r);
                item.RegisterCallback <MouseUpEvent>(e =>
                {
                    Selection.activeObject = AssetDatabase.LoadAssetAtPath <Object>(r);
                });
                itemIcon.style.backgroundImage = AssetDatabase.GetCachedIcon(r) as Texture2D;
                AssetInfo depInfo = AssetReferenceViewer.GetAsset(r);
                inBuildIcon.style.backgroundImage =
                    depInfo.IsIncludedInBuild ? ProjectIcons.LinkBlue : ProjectIcons.LinkBlack;
                inBuildIcon.tooltip = depInfo.IncludedStatus.ToString();
                item.style.display  = DisplayStyle.Flex;
                referencesFoldout.contentContainer.Add(item);
            }

            if (!selectedAssetInfo.IsIncludedInBuild)
            {
                helpBox.style.display = DisplayStyle.Flex;
                var helpLabel  = root.Q <Label>("HelpBoxLabel");
                var helpButton = root.Q <Button>("HelpButton");
                var helpIcon   = root.Q <VisualElement>("HelpIcon");
                helpButton.text                = "Delete Asset";
                helpButton.style.display       = DisplayStyle.Flex;
                helpLabel.text                 = "This asset is not referenced and never used. Would you like to delete it ?";
                helpIcon.style.backgroundImage = (Texture2D)EditorGUIUtility.IconContent("console.warnicon").image;
                helpButton.clicked            += () =>
                {
                    File.Delete(selectedPath);
                    AssetDatabase.Refresh();
                    AssetReferenceViewer.RemoveAssetFromDatabase(selectedPath);
                };
            }

            EditorApplication.delayCall = () =>
            {
                graphViewer.FrameAll();
            };
        }
Пример #9
0
        private IncludedInBuild CheckIncludedStatus()
        {
            foreach (var referencer in references)
            {
                AssetInfo refInfo = AssetReferenceViewer.GetAsset(referencer);
                if (refInfo.IsIncludedInBuild)
                {
                    return(IncludedInBuild.Referenced);
                }
            }

            bool isInEditor = false;

            string[] directories = path.ToLower().Split('/');
            for (int i = 0; i < directories.Length - 1; i++)
            {
                switch (directories[i])
                {
                case "editor":
                    isInEditor = true;
                    break;

                case "resources":
                    return(IncludedInBuild.ResourceAsset);

                case "plugins":
                    break;

                default:
                    break;
                }
            }

            string extension = System.IO.Path.GetExtension(path);

            switch (extension)
            {
            case ".cs":
                if (isInEditor)
                {
                    return(IncludedInBuild.NotIncludable);
                }
                else
                {
                    return(IncludedInBuild.RuntimeScript);
                }

            case ".unity":
                if (EditorBuildSettings.scenes.Select(x => x.path).Contains(path))
                {
                    return(IncludedInBuild.SceneInBuild);
                }
                break;

            // Todo : Handle DLL
            // https://docs.unity3d.com/ScriptReference/Compilation.Assembly-compiledAssemblyReferences.html
            // CompilationPipeline
            // Assembly Definition
            default:
                break;
            }

            return(IncludedInBuild.NotIncluded);
        }