private AIReference GetAIReference(AIStorage ai)
        {
            AIReference aiRef;

            if (!_aiReferences.TryGetValue(ai.aiId, out aiRef))
            {
                aiRef = new AIReference(ai.aiId, ai.name);
                _aiReferences.Add(ai.aiId, aiRef);
            }

            return(aiRef);
        }
        private void DrawAIListItem(AIReference item)
        {
            var labelContent = new GUIContent();

            EditorGUILayout.BeginVertical("Box");
            EditorGUILayout.BeginHorizontal(SharedStyles.BuiltIn.listItemHeader);
            labelContent.text = item.name;
            EditorGUILayout.LabelField(labelContent);
            EditorGUILayout.EndHorizontal();

            if (item.directReferences.Count > 0)
            {
                EditorGUILayout.BeginVertical("Box");
                labelContent.text = "Direct References";
                EditorGUILayout.LabelField(labelContent, SharedStyles.BuiltIn.centeredWrappedText);
                item.directReferencesExpanded = EditorGUI.Foldout(GUILayoutUtility.GetLastRect(), item.directReferencesExpanded, GUIContent.none, true);
                if (item.directReferencesExpanded)
                {
                    foreach (var aiRef in item.directReferences)
                    {
                        labelContent.text = aiRef.name;
                        EditorGUILayout.LabelField(labelContent);
                    }
                }

                EditorGUILayout.EndVertical();
            }

            if (item.directlyReferencingScenesOrPrefabs.Length > 0)
            {
                EditorGUILayout.BeginVertical("Box");
                labelContent.text = "Directly referenced by Scene or Prefab";
                EditorGUILayout.LabelField(labelContent, SharedStyles.BuiltIn.centeredWrappedText);
                item.directScenesOrPrefabsExpanded = EditorGUI.Foldout(GUILayoutUtility.GetLastRect(), item.directScenesOrPrefabsExpanded, GUIContent.none, true);
                if (item.directScenesOrPrefabsExpanded)
                {
                    foreach (var sof in item.directlyReferencingScenesOrPrefabs)
                    {
                        labelContent.text = sof.name;
                        EditorGUILayout.LabelField(labelContent);
                    }
                }

                EditorGUILayout.EndVertical();
            }

            if (item.directlyReferencingAIs.Length > 0)
            {
                EditorGUILayout.BeginVertical("Box");
                labelContent.text = "Directly referenced by AIs";
                EditorGUILayout.LabelField(labelContent, SharedStyles.BuiltIn.centeredWrappedText);
                item.directAIsExpanded = EditorGUI.Foldout(GUILayoutUtility.GetLastRect(), item.directAIsExpanded, GUIContent.none, true);
                if (item.directAIsExpanded)
                {
                    foreach (var aiRef in item.directlyReferencingAIs)
                    {
                        labelContent.text = aiRef.name;
                        EditorGUILayout.LabelField(labelContent);
                    }
                }

                EditorGUILayout.EndVertical();
            }

            if (item.indirectReferences.Count > 0)
            {
                EditorGUILayout.BeginVertical("Box");
                labelContent.text = "Indirect References";
                EditorGUILayout.LabelField(labelContent, SharedStyles.BuiltIn.centeredWrappedText);
                item.indirectReferencesExpanded = EditorGUI.Foldout(GUILayoutUtility.GetLastRect(), item.indirectReferencesExpanded, GUIContent.none, true);
                if (item.indirectReferencesExpanded)
                {
                    foreach (var aiRef in item.indirectReferences)
                    {
                        labelContent.text = aiRef.name;
                        EditorGUILayout.LabelField(labelContent);
                    }
                }

                EditorGUILayout.EndVertical();
            }

            if (item.indirectlyReferencingScenesOrPrefabs.Length > 0)
            {
                EditorGUILayout.BeginVertical("Box");
                labelContent.text = "Indirectly referenced by Scene or Prefab";
                EditorGUILayout.LabelField(labelContent, SharedStyles.BuiltIn.centeredWrappedText);
                item.indirectScenesOrPrefabsExpanded = EditorGUI.Foldout(GUILayoutUtility.GetLastRect(), item.indirectScenesOrPrefabsExpanded, GUIContent.none, true);
                if (item.indirectScenesOrPrefabsExpanded)
                {
                    foreach (var sof in item.indirectlyReferencingScenesOrPrefabs)
                    {
                        labelContent.text = sof.name;
                        EditorGUILayout.LabelField(labelContent);
                    }
                }

                EditorGUILayout.EndVertical();
            }

            if (item.indirectlyReferencingAIs.Length > 0)
            {
                EditorGUILayout.BeginVertical("Box");
                labelContent.text = "Indirectly referenced by AIs";
                EditorGUILayout.LabelField(labelContent, SharedStyles.BuiltIn.centeredWrappedText);
                item.indirectAIsExpanded = EditorGUI.Foldout(GUILayoutUtility.GetLastRect(), item.indirectAIsExpanded, GUIContent.none, true);
                if (item.indirectAIsExpanded)
                {
                    foreach (var aiRef in item.indirectlyReferencingAIs)
                    {
                        labelContent.text = aiRef.name;
                        EditorGUILayout.LabelField(labelContent);
                    }
                }

                EditorGUILayout.EndVertical();
            }

            EditorGUILayout.EndVertical();
        }