示例#1
0
    Depender GenDepender(string path, Depender parent = null)
    {
        Depender depender = new Depender();

        depender.path     = path;
        depender.name     = Path.GetFileNameWithoutExtension(path);
        depender.parent   = parent;
        depender._object  = AssetDatabase.LoadMainAssetAtPath(path);
        depender._subList = new List <Depender>();
        depender.on       = true;

        if (IsCirculation(path, parent))
        {
            depender.circulation = true;
        }
        else
        {
            string[] dependList = GetDirectDependencies(path);
            for (int i = 0; i < dependList.Length; ++i)
            {
                depender._subList.Add(GenDepender(dependList[i], depender));
            }
        }

        return(depender);
    }
示例#2
0
 void Analyze()
 {
     dependCache  = new Dictionary <string, string[]>();
     dependerRoot = GenDepender(AssetDatabase.GetAssetPath(Selection.activeObject));
     scrollpos    = Vector2.zero;
     Repaint();
 }
示例#3
0
    void DoDependerGUI(Depender depender, int indent = 0)
    {
        EditorGUILayout.BeginHorizontal();
        GUILayout.Space(indent * 16);
        if (depender._subList.Count > 0)
        {
            depender.on = GUILayout.Toggle(depender.on, "", EditorStyles.foldout, GUILayout.Width(10f));
        }
        EditorGUIUtility.SetIconSize(new Vector2(16, 16));
        GUILayout.Label(AssetDatabase.GetCachedIcon(depender.path));
        if (GUILayout.Button(depender.name, EditorStyles.label))
        {
            Selection.activeObject = depender._object;
        }
        if (depender.circulation)
        {
            GUILayout.Space(16);
            GUI.color = Color.red;
            GUILayout.Label("circular reference");
            GUI.color = Color.white;
        }
        GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal();

        if (depender.on)
        {
            for (int i = 0; i < depender._subList.Count; ++i)
            {
                DoDependerGUI(depender._subList[i], indent + 1);
            }
        }
    }
示例#4
0
    bool IsCirculation(string path, Depender parent)
    {
        while (parent != null)
        {
            if (string.Compare(path, parent.path, true) == 0)
            {
                return(true);
            }
            parent = parent.parent;
        }

        return(false);
    }