unity-atoms/Source/Editor/ReferenceDrawer.cs
Jeff Campbell 7763f81ede Unified line endings
* Unified all line endings in project to align with .editorconfig; all end-of-line characters have been set to LF and new-lines placed at the end of every file if not present.
2019-04-07 11:56:54 +02:00

78 lines
2.8 KiB
C#

using UnityEditor;
using UnityEngine;
namespace UnityAtoms
{
public abstract class ReferenceDrawer : PropertyDrawer
{
private readonly string[] popupOptions =
{ "Use Constant", "Use Variable" };
private GUIStyle popupStyle;
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
if (popupStyle == null)
{
popupStyle = new GUIStyle(GUI.skin.GetStyle("PaneOptions"));
popupStyle.imagePosition = ImagePosition.ImageOnly;
}
label = EditorGUI.BeginProperty(position, label, property);
position = EditorGUI.PrefixLabel(position, label);
EditorGUI.BeginChangeCheck();
// Get properties
SerializedProperty useConstant = property.FindPropertyRelative("UseConstant");
SerializedProperty constantValue = property.FindPropertyRelative("ConstantValue");
SerializedProperty variable = property.FindPropertyRelative("Variable");
// Calculate rect for configuration button
Rect buttonRect = new Rect(position);
buttonRect.yMin += popupStyle.margin.top;
buttonRect.width = popupStyle.fixedWidth + popupStyle.margin.right;
position.xMin = buttonRect.xMax;
// Store old indent level and set it to 0, the PrefixLabel takes care of it
int indent = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;
int result = EditorGUI.Popup(buttonRect, useConstant.boolValue ? 0 : 1, popupOptions, popupStyle);
useConstant.boolValue = result == 0;
EditorGUI.PropertyField(position,
useConstant.boolValue ? constantValue : variable,
GUIContent.none);
if (EditorGUI.EndChangeCheck())
property.serializedObject.ApplyModifiedProperties();
EditorGUI.indentLevel = indent;
EditorGUI.EndProperty();
}
[CustomPropertyDrawer(typeof(BoolReference))]
public class BoolReferenceDrawer : ReferenceDrawer { }
[CustomPropertyDrawer(typeof(ColorReference))]
public class ColorReferenceDrawer : ReferenceDrawer { }
[CustomPropertyDrawer(typeof(FloatReference))]
public class FloatReferenceDrawer : ReferenceDrawer { }
[CustomPropertyDrawer(typeof(IntReference))]
public class IntReferenceDrawer : ReferenceDrawer { }
[CustomPropertyDrawer(typeof(StringReference))]
public class StringReferenceDrawer : ReferenceDrawer { }
[CustomPropertyDrawer(typeof(Vector2Reference))]
public class Vector2ReferenceDrawer : ReferenceDrawer { }
[CustomPropertyDrawer(typeof(Vector3Reference))]
public class Vector3ReferenceDrawer : ReferenceDrawer { }
}
}