using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using Invector.vItemManager; namespace Beyond { public class bItemSelector : PopupWindowContent { public UnityEngine.Events.UnityAction onSelect; public List items; public GUIContent[] contents; private GUIStyle boxStyle; public List filter = new List(); public string search = ""; private bool isOpenFilter; private Vector2 scroll; public override Vector2 GetWindowSize() { return new Vector2(200, Mathf.Clamp(items.Count * 75, 100, 500)); } public bItemSelector(List items, ref List filter, UnityEngine.Events.UnityAction onSelect) { this.items = items; this.filter = filter; this.onSelect = onSelect; CreateContent(); } private void CreateContent() { boxStyle = new GUIStyle(GUI.skin.box); boxStyle.alignment = TextAnchor.UpperLeft; boxStyle.fontStyle = FontStyle.Italic; boxStyle.fontSize = 11; contents = new GUIContent[items.Count]; for (int i = 0; i < items.Count; i++) { var name = " ID " + items[i].id.ToString("00") + "\n - " + items[i].name + "\n - " + items[i].type.ToString(); var texture = items[i].iconTexture; var tooltip = items[i].description; contents[i] = new GUIContent(name, texture, tooltip); } } public override void OnGUI(Rect rect) { if (contents == null) return; GUILayout.Label("ItemSelector", EditorStyles.boldLabel); DrawFilter(); scroll = GUILayout.BeginScrollView(scroll, "box"); for (int i = 0; i < contents.Length; i++) { if ((filter.Count == 0 || filter.Contains(items[i].type)) && (string.IsNullOrEmpty(search) || items[i].name.ToLower().Contains(search.ToLower()))) if (GUILayout.Button(contents[i], boxStyle, GUILayout.Height(50), GUILayout.MinWidth(50))) { onSelect(items[i]); editorWindow.Close(); } } GUILayout.EndScrollView(); } private void DrawFilter() { GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); isOpenFilter = EditorGUILayout.Foldout(isOpenFilter, "Filters (" + filter.Count + ")"); if (GUILayout.Button("+", GUILayout.Width(20), GUILayout.Height(15))) { isOpenFilter = true; filter.Add((bItemType)0); } GUILayout.EndHorizontal(); if (isOpenFilter) { for (int i = 0; i < filter.Count; i++) { GUILayout.BeginHorizontal(); filter[i] = (bItemType)EditorGUILayout.EnumPopup(filter[i]); if (GUILayout.Button("-", GUILayout.Width(20), GUILayout.Height(15))) { filter.RemoveAt(i); GUILayout.EndHorizontal(); break; } GUILayout.EndHorizontal(); } } GUILayout.EndVertical(); GUILayout.BeginHorizontal(); search = GUILayout.TextField(search, GUILayout.Width(170)); GUILayout.Label(EditorGUIUtility.IconContent("Search Icon"), GUILayout.Height(20)); GUILayout.EndHorizontal(); } } }