You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.6 KiB
68 lines
2.6 KiB
//========= Copyright 2016-2020, HTC Corporation. All rights reserved. ===========
|
|
|
|
using System;
|
|
using System.Linq;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace HTC.UnityPlugin.Utility
|
|
{
|
|
[CustomPropertyDrawer(typeof(CustomOrderedEnumAttribute))]
|
|
public class CusromOrderedEnumAttributeDrawer : PropertyDrawer
|
|
{
|
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
|
{
|
|
// First get the attribute since it contains the range for the slider
|
|
var attr = attribute as CustomOrderedEnumAttribute;
|
|
|
|
EditorGUI.BeginProperty(position, label, property);
|
|
|
|
position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), new GUIContent(property.displayName));
|
|
|
|
// determine which enum type to display
|
|
Type displayedEnumType = null;
|
|
if (property.propertyType == SerializedPropertyType.Enum)
|
|
{
|
|
if (attr.overrideEnumType != null && attr.overrideEnumType.IsEnum)
|
|
{
|
|
displayedEnumType = attr.overrideEnumType;
|
|
}
|
|
else
|
|
{
|
|
displayedEnumType = fieldInfo.FieldType;
|
|
}
|
|
}
|
|
else if (property.propertyType == SerializedPropertyType.Integer)
|
|
{
|
|
if (attr.overrideEnumType != null && attr.overrideEnumType.IsEnum)
|
|
{
|
|
displayedEnumType = attr.overrideEnumType;
|
|
}
|
|
}
|
|
|
|
// display enum popup if displayedEnumType is determined, otherwise, display the default property field
|
|
if (displayedEnumType == null)
|
|
{
|
|
EditorGUI.PropertyField(position, property);
|
|
}
|
|
else
|
|
{
|
|
var enumInfo = EnumUtils.GetDisplayInfo(displayedEnumType);
|
|
var displayedNames = enumInfo.displayedNames;
|
|
var displayedValues = enumInfo.displayedValues;
|
|
|
|
if (!enumInfo.value2displayedIndex.ContainsKey(property.intValue))
|
|
{
|
|
displayedNames = displayedNames.Concat(new string[] { property.intValue.ToString() }).ToArray();
|
|
displayedValues = displayedValues.Concat(new int[] { property.intValue }).ToArray();
|
|
}
|
|
|
|
property.intValue = EditorGUI.IntPopup(position, property.intValue, displayedNames, displayedValues);
|
|
}
|
|
|
|
property.serializedObject.ApplyModifiedProperties();
|
|
|
|
EditorGUI.EndProperty();
|
|
}
|
|
}
|
|
}
|