forked from Shardstone/trail-into-darkness
added more utilty packges
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
#if UNITY_EDITOR
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace InspectorToolkit.Internal
|
||||
{
|
||||
[CustomPropertyDrawer(typeof(AttributeBase), true)]
|
||||
public class AttributeBaseDrawer : PropertyDrawer
|
||||
{
|
||||
private AttributeBase[] _cachedAttributes;
|
||||
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
CacheAttributes();
|
||||
|
||||
for (var i = _cachedAttributes.Length - 1; i >= 0; i--)
|
||||
{
|
||||
var overriden = _cachedAttributes[i].OverrideHeight();
|
||||
if (overriden != null) return overriden.Value;
|
||||
}
|
||||
|
||||
return base.GetPropertyHeight(property, label);
|
||||
}
|
||||
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
CacheAttributes();
|
||||
|
||||
bool drawn = false;
|
||||
for (var i = _cachedAttributes.Length - 1; i >= 0; i--)
|
||||
{
|
||||
var ab = _cachedAttributes[i];
|
||||
ab.ValidateProperty(property);
|
||||
|
||||
ab.OnBeforeGUI(position, property, label);
|
||||
|
||||
// Draw the things with higher priority first. If drawn once - skip drawing
|
||||
if (!drawn)
|
||||
{
|
||||
if (ab.OnGUI(position, property, label)) drawn = true;
|
||||
}
|
||||
|
||||
ab.OnAfterGUI(position, property, label);
|
||||
}
|
||||
|
||||
if (!drawn) EditorGUI.PropertyField(position, property, label);
|
||||
}
|
||||
|
||||
private void CacheAttributes()
|
||||
{
|
||||
if (_cachedAttributes.IsNullOrEmpty())
|
||||
{
|
||||
_cachedAttributes = fieldInfo
|
||||
.GetCustomAttributes(typeof(AttributeBase), false)
|
||||
.OrderBy(s => ((PropertyAttribute) s).order)
|
||||
.Select(a => a as AttributeBase).ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user