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); }
void Analyze() { dependCache = new Dictionary <string, string[]>(); dependerRoot = GenDepender(AssetDatabase.GetAssetPath(Selection.activeObject)); scrollpos = Vector2.zero; Repaint(); }
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); } } }
bool IsCirculation(string path, Depender parent) { while (parent != null) { if (string.Compare(path, parent.path, true) == 0) { return(true); } parent = parent.parent; } return(false); }