public static Vector2 DrawAOTList <AOTListType> (string p_labelString, AOTListType p_list, Delegates.FunctionPointer <AOTListType, int> p_onDrawElementFunction, Delegates.FunctionPointer <AOTListType> p_onAddElementFunctions, Vector2 p_scrollView, Vector2 p_initialOffset, bool p_useScroll = true) where AOTListType : IAOTList { Vector2 v_scrollView = p_scrollView; if (p_list != null) { InspectorUtils.BeginContainer(p_initialOffset.x, p_initialOffset.y); p_list.FoldOut = EditorGUILayout.Foldout(p_list.FoldOut, p_labelString); int v_indexToRemove = -1; if (p_list.FoldOut) { EditorGUILayout.BeginHorizontal(); GUILayout.Space(10); EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); GUI.enabled = false; GUILayout.Label("Length", GUILayout.Width(50)); EditorGUILayout.IntField(p_list.Count, GUILayout.Width(80)); GUI.enabled = true; //Add Functions Caller if (InspectorUtils.DrawButton("Add", Color.cyan, GUILayout.Width(50))) { if (p_onAddElementFunctions != null) { p_onAddElementFunctions(p_list); } } EditorGUILayout.EndHorizontal(); //Draw Opener InspectorUtils.DrawTitleText("{", new Color(0.5f, 0.5f, 0.5f)); if (p_useScroll) { v_scrollView = GUILayout.BeginScrollView(p_scrollView); } for (int i = 0; i < p_list.Count; i++) { EditorGUILayout.BeginHorizontal(); GUILayout.Space(10); EditorGUILayout.BeginVertical(); if (p_onDrawElementFunction != null) { p_onDrawElementFunction(p_list, i); } EditorGUILayout.EndVertical(); if (InspectorUtils.DrawButton("X", Color.red, GUILayout.MaxWidth(24), GUILayout.MaxHeight(15))) { v_indexToRemove = i; } EditorGUILayout.EndHorizontal(); } if (p_useScroll) { GUILayout.EndScrollView(); } //Draw Closer InspectorUtils.DrawTitleText("}", new Color(0.5f, 0.5f, 0.5f)); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } //Remove Clicked if (v_indexToRemove >= 0 && v_indexToRemove <= p_list.Count) { p_list.RemoveAt(v_indexToRemove); v_indexToRemove = -1; } InspectorUtils.EndContainer(); } return(v_scrollView); }