using System; using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace Invector.vItemManager { //public static class vItemEnumHelper //{ // public static string GetEnumDescription(this Enum value) // { // FieldInfo fi = value.GetType().GetField(value.ToString()); // DescriptionAttribute[] attributes = fi.GetCustomAttributes(typeof(DescriptionAttribute), false) as DescriptionAttribute[]; // if (attributes != null && attributes.Any()) // { // return attributes.First().Description; // } // return value.ToString(); // } //} public class vItemEnumsWindow : EditorWindow { public vItemEnumsList[] datas; public List _itemTypeNames = new List(); public List _itemAttributeNames = new List(); public List _itemTypeEnumFormats = new List(); public List _itemAttributesEnumFormats = new List(); public List itemEnumEditorList = new List(); public GUISkin skin; public Vector2 scrollTypes,scrollAttributes; public Vector2 scrollList; public static vItemEnumsWindow instance; [MenuItem("Invector/Inventory/ItemEnums/Open ItemEnums Editor")] public static void CreateWindow() { if (instance == null) { var window = vItemEnumsWindow.GetWindow("Item Enums", true); instance = window; window.skin = Resources.Load("vSkin") as GUISkin; #region Get all vItemType values of current Enum try { window._itemTypeNames = Enum.GetNames(typeof(vItemType)).vToList(); for (int i = 0; i < window._itemTypeNames.Count; i++) { vItemType att = (vItemType)Enum.Parse(typeof(vItemType), (window._itemTypeNames[i])); window._itemTypeEnumFormats.Add(att.DisplayFormat()); } } catch { } #endregion #region Get all vItemAttributes values of current Enum try { window._itemAttributeNames = Enum.GetNames(typeof(vItemAttributes)).vToList(); for(int i = 0;i(""); for(int i=0;i _itemAttributeNames.Count ? _itemTypeNames.Count : _itemAttributeNames.Count; GUILayout.BeginHorizontal(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); #region Item Type current GUILayout.BeginVertical("box",GUILayout.ExpandWidth(true)); GUILayout.Box("Item Types (" + (_itemTypeNames.Count) + ")", GUILayout.ExpandWidth(true)); scrollTypes = GUILayout.BeginScrollView(scrollTypes, GUILayout.MinHeight(Mathf.Clamp(size * EditorGUIUtility.singleLineHeight, 10, 500))); for (int i = 0; i < _itemTypeNames.Count; i++) { GUILayout.Label(_itemTypeNames[i], EditorStyles.miniBoldLabel, GUILayout.ExpandWidth(true)); } GUILayout.EndScrollView(); GUILayout.EndVertical(); #endregion #region Item Attribute current GUILayout.BeginVertical("box", GUILayout.ExpandWidth(true)); GUILayout.Box("Item Attributes ("+(_itemAttributeNames.Count)+")", GUILayout.ExpandWidth(true)); scrollAttributes = GUILayout.BeginScrollView(scrollAttributes, GUILayout.MinHeight(Mathf.Clamp(size * EditorGUIUtility.singleLineHeight, 10, 500))); for (int i = 0; i < _itemAttributeNames.Count; i++) { GUILayout.Label(_itemAttributeNames[i], EditorStyles.miniBoldLabel,GUILayout.ExpandWidth(true)); } GUILayout.EndScrollView(); GUILayout.EndVertical(); #endregion GUILayout.EndHorizontal(); } void DrawItemEnumListData(vItemEnumsList data) { SerializedObject _data = new SerializedObject(data); _data.Update(); GUILayout.BeginVertical("box"); GUILayout.Box(data.name, GUILayout.ExpandWidth(true)); EditorGUILayout.ObjectField(data, typeof(vItemEnumsList), false); GUILayout.BeginHorizontal(); #region Item Types var itemTypeEnumValueList = _data.FindProperty("itemTypeEnumValues"); GUILayout.BeginVertical("box", GUILayout.Width(200)); GUILayout.BeginHorizontal("box", GUILayout.ExpandWidth(true)); GUILayout.Label("Item Types", EditorStyles.miniBoldLabel); EditorGUILayout.PropertyField(itemTypeEnumValueList.FindPropertyRelative("Array.size"), GUIContent.none); GUILayout.EndHorizontal(); var labelWidht = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = 30f; var color = GUI.color; for (int i = 0; i < itemTypeEnumValueList.arraySize; i++) { if (_itemTypeNames.Contains(itemTypeEnumValueList.GetArrayElementAtIndex(i).stringValue)) GUI.color = Color.gray; else GUI.color = color; EditorGUILayout.PropertyField(itemTypeEnumValueList.GetArrayElementAtIndex(i), new GUIContent(i.ToString())); } GUILayout.EndVertical(); #endregion #region Item Attributes GUI.color = color; var itemAttributesEnumValuesList = _data.FindProperty("itemAttributesEnumValues"); GUILayout.BeginVertical("box", GUILayout.Width(200)); GUILayout.BeginHorizontal("box", GUILayout.ExpandWidth(true)); GUILayout.Label("Item Attributes", EditorStyles.miniBoldLabel); EditorGUILayout.PropertyField(itemAttributesEnumValuesList.FindPropertyRelative("Array.size"), GUIContent.none); GUILayout.EndHorizontal(); for (int i = 0; i < itemAttributesEnumValuesList.arraySize; i++) { if (_itemAttributeNames.Contains(itemAttributesEnumValuesList.GetArrayElementAtIndex(i).stringValue)) GUI.color = Color.gray; else GUI.color = color; EditorGUILayout.PropertyField(itemAttributesEnumValuesList.GetArrayElementAtIndex(i), new GUIContent(i.ToString())); } GUILayout.EndVertical(); #endregion GUILayout.EndHorizontal(); GUILayout.EndVertical(); _data.ApplyModifiedProperties(); if (_data.ApplyModifiedProperties()) EditorUtility.SetDirty(data); EditorGUIUtility.labelWidth = labelWidht; GUI.color = color; } } }