Files
beyond/Assets/Scripts/InvectorDerivatives/Editor/bItemEnumsWindow.cs
2024-11-20 15:21:28 +01:00

237 lines
10 KiB
C#

using Invector;
using Invector.vItemManager;
using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace Beyond
{
//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 bItemEnumsWindow : EditorWindow
{
public vItemEnumsList[] datas;
public List<string> _itemTypeNames = new List<string>();
public List<string> _itemAttributeNames = new List<string>();
public List<string> _itemTypeEnumFormats = new List<string>();
public List<string> _itemAttributesEnumFormats = new List<string>();
public List<bItemEnumsListEditor> itemEnumEditorList = new List<bItemEnumsListEditor>();
public GUISkin skin;
public Vector2 scrollTypes, scrollAttributes;
public Vector2 scrollList;
public static bItemEnumsWindow instance;
[MenuItem("Invector/Inventory/ItemEnums/Open ItemEnums Editor")]
public static void CreateWindow()
{
if (instance == null)
{
var window = bItemEnumsWindow.GetWindow<bItemEnumsWindow>("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(bItemType)).vToList();
for (int i = 0; i < window._itemTypeNames.Count; i++)
{
bItemType att = (bItemType)Enum.Parse(typeof(bItemType), (window._itemTypeNames[i]));
window._itemTypeEnumFormats.Add(att.DisplayFormat());
}
}
catch
{
}
#endregion Get all vItemType values of current Enum
#region Get all vItemAttributes values of current Enum
try
{
window._itemAttributeNames = Enum.GetNames(typeof(Invector.vItemManager.vItemAttributes)).vToList();
for (int i = 0; i < window._itemAttributeNames.Count; i++)
{
Invector.vItemManager.vItemAttributes att = (Invector.vItemManager.vItemAttributes)Enum.Parse(typeof(Invector.vItemManager.vItemAttributes), (window._itemAttributeNames[i]));
window._itemAttributesEnumFormats.Add(att.DisplayFormat());
}
}
catch
{
}
#endregion Get all vItemAttributes values of current Enum
window.datas = Resources.LoadAll<vItemEnumsList>("");
for (int i = 0; i < window.datas.Length; i++)
{
window.itemEnumEditorList.Add(bItemEnumsListEditor.CreateEditor(window.datas[i]) as bItemEnumsListEditor);
}
window.minSize = new Vector2(460, 600);
}
}
private void OnGUI()
{
if (skin) GUI.skin = skin;
this.minSize = new Vector2(460, 600);
GUILayout.BeginVertical("box");
DrawEnums();
GUILayout.EndVertical();
GUILayout.BeginVertical("box");
GUILayout.Box("Edit Enums");
scrollList = GUILayout.BeginScrollView(scrollList, GUILayout.ExpandWidth(true), GUILayout.MinHeight(100), GUILayout.MaxHeight(600));
EditorGUILayout.HelpBox("**Format : Rich Text Format usage to create custom text format to display the Item Enums in the inventory like a\n" +
" Special Tags : (NAME) : dipllay name of the Enum\n" +
" (VALUE): display value of the Attribute (only for Item Attribute Enum)\n" +
"Keep Format empty to use Default display", MessageType.Info);
for (int i = 0; i < itemEnumEditorList.Count; i++)
{
GUILayout.BeginVertical("box");
EditorGUILayout.ObjectField(itemEnumEditorList[i].serializedObject.targetObject, typeof(vItemEnumsList), false);
itemEnumEditorList[i].serializedObject.Update();
itemEnumEditorList[i].DrawEnumList();
if (GUI.changed)
{
itemEnumEditorList[i].serializedObject.ApplyModifiedProperties();
}
GUILayout.EndVertical();
GUILayout.Space(10);
GUILayout.Box("", GUILayout.Height(5));
GUILayout.Space(10);
}
GUILayout.EndScrollView();
GUILayout.EndVertical();
if (GUILayout.Button(new GUIContent("Refresh ItemEnums", "Save and refesh changes to vItemEnums")))
{
bItemEnumsBuilder.RefreshItemEnums();
}
}
private void DrawEnums()
{
GUILayout.Box("vItemEnums");
int size = _itemTypeNames.Count > _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 Item Type current
#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 Item Attribute current
GUILayout.EndHorizontal();
}
private 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 Item Types
#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 Item Attributes
GUILayout.EndHorizontal();
GUILayout.EndVertical();
_data.ApplyModifiedProperties();
if (_data.ApplyModifiedProperties())
EditorUtility.SetDirty(data);
EditorGUIUtility.labelWidth = labelWidht;
GUI.color = color;
}
}
}