First Commit
This commit is contained in:
47
Assets/Attributes/Editor/EnumFlagDrawer.cs
Normal file
47
Assets/Attributes/Editor/EnumFlagDrawer.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Golems
|
||||
{
|
||||
// http://wiki.unity3d.com/index.php?title=EnumFlagPropertyDrawer&oldid=19986S
|
||||
[CustomPropertyDrawer(typeof(EnumFlagAttribute))]
|
||||
public class EnumFlagDrawer : PropertyDrawer
|
||||
{
|
||||
private const BindingFlags k_BindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public |
|
||||
BindingFlags.NonPublic;
|
||||
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
EnumFlagAttribute flagSettings = (EnumFlagAttribute) attribute;
|
||||
Enum targetEnum = GetBaseProperty<Enum>(property);
|
||||
|
||||
string propName = flagSettings.AttributeName;
|
||||
if (string.IsNullOrEmpty(propName))
|
||||
propName = property.name;
|
||||
|
||||
EditorGUI.BeginProperty(position, label, property);
|
||||
Enum enumNew = EditorGUI.EnumFlagsField(position, propName, targetEnum);
|
||||
property.intValue = (int) Convert.ChangeType(enumNew, targetEnum.GetType());
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
|
||||
static T GetBaseProperty<T>(SerializedProperty prop)
|
||||
{
|
||||
// Separate the steps it takes to get to this property
|
||||
string[] separatedPaths = prop.propertyPath.Split('.');
|
||||
|
||||
// Go down to the root of this serialized property
|
||||
System.Object reflectionTarget = prop.serializedObject.targetObject as object;
|
||||
// Walk down the path to get the target object
|
||||
foreach (var path in separatedPaths)
|
||||
{
|
||||
FieldInfo fieldInfo = reflectionTarget.GetType().GetField(path, k_BindingFlags);
|
||||
reflectionTarget = fieldInfo.GetValue(reflectionTarget);
|
||||
}
|
||||
|
||||
return (T) reflectionTarget;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user