using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
#if UNITY_EDITOR
|
using UnityEditor;
|
using System.Reflection;
|
#endif
|
|
[AttributeUsage(AttributeTargets.Field)]
|
public class EnumLabelAttribute : PropertyAttribute
|
{
|
public readonly Type enumType;
|
public EnumLabelAttribute(Type type)
|
{
|
this.enumType = type;
|
}
|
}
|
|
#if UNITY_EDITOR
|
[CustomPropertyDrawer(typeof(EnumLabelAttribute))]
|
public class EnumLabelPropertyDrawer : PropertyDrawer
|
{
|
List<string> m_EnumLabels = new List<string>();
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
{
|
var customAttribute = (EnumLabelAttribute)attribute;
|
if (m_EnumLabels.Count != property.enumNames.Length)
|
{
|
m_EnumLabels.Clear();
|
var enumtype = customAttribute.enumType;
|
foreach (var enumName in property.enumNames)
|
{
|
var enumfield = enumtype.GetField(enumName);
|
var customAttributes = enumfield.GetCustomAttributes(typeof(HeaderAttribute), false);
|
m_EnumLabels.Add(customAttributes.Length <= 0 ? enumName : ((HeaderAttribute)customAttributes[0]).header);
|
}
|
}
|
EditorGUI.BeginChangeCheck();
|
var value = EditorGUI.Popup(position, fieldInfo.Name, property.enumValueIndex, m_EnumLabels.ToArray());
|
if (EditorGUI.EndChangeCheck())
|
{
|
property.enumValueIndex = value;
|
}
|
}
|
}
|
#endif
|