Files
lllyasviel 72f9f431f4 first
2017-05-14 16:15:52 +08:00

97 lines
3.4 KiB
C#

//----------------------------------------------
// NGUI: Next-Gen UI kit
// Copyright © 2011-2015 Tasharen Entertainment
//----------------------------------------------
using UnityEngine;
using UnityEditor;
[CanEditMultipleObjects]
[CustomEditor(typeof(PropertyBinding))]
public class PropertyBindingEditor : Editor
{
public override void OnInspectorGUI ()
{
PropertyBinding pb = target as PropertyBinding;
NGUIEditorTools.SetLabelWidth(80f);
serializedObject.Update();
if (pb.direction == PropertyBinding.Direction.TargetUpdatesSource && pb.target != null)
PropertyReferenceDrawer.filter = pb.target.GetPropertyType();
GUILayout.Space(3f);
PropertyBinding.Direction dir = (target as PropertyBinding).direction;
PropertyReferenceDrawer.mustRead = (dir == PropertyBinding.Direction.SourceUpdatesTarget ||
dir == PropertyBinding.Direction.BiDirectional);
PropertyReferenceDrawer.mustWrite = (dir == PropertyBinding.Direction.TargetUpdatesSource ||
dir == PropertyBinding.Direction.BiDirectional);
NGUIEditorTools.DrawProperty(serializedObject, "source");
if (pb.direction == PropertyBinding.Direction.SourceUpdatesTarget && pb.source != null)
PropertyReferenceDrawer.filter = pb.source.GetPropertyType();
if (pb.source.target != null)
{
GUILayout.Space(-18f);
if (pb.direction == PropertyBinding.Direction.TargetUpdatesSource)
{
GUILayout.Label(" \u25B2"); // Up
}
else if (pb.direction == PropertyBinding.Direction.SourceUpdatesTarget)
{
GUILayout.Label(" \u25BC"); // Down
}
else GUILayout.Label(" \u25B2\u25BC");
}
GUILayout.Space(1f);
PropertyReferenceDrawer.mustRead = (dir == PropertyBinding.Direction.TargetUpdatesSource ||
dir == PropertyBinding.Direction.BiDirectional);
PropertyReferenceDrawer.mustWrite = (dir == PropertyBinding.Direction.SourceUpdatesTarget ||
dir == PropertyBinding.Direction.BiDirectional);
NGUIEditorTools.DrawProperty(serializedObject, "target");
PropertyReferenceDrawer.mustRead = false;
PropertyReferenceDrawer.mustWrite = false;
PropertyReferenceDrawer.filter = typeof(void);
GUILayout.Space(1f);
NGUIEditorTools.DrawPaddedProperty(serializedObject, "direction");
NGUIEditorTools.DrawPaddedProperty(serializedObject, "update");
GUILayout.BeginHorizontal();
NGUIEditorTools.DrawProperty(" ", serializedObject, "editMode", GUILayout.Width(100f));
GUILayout.Label("Update in Edit Mode");
GUILayout.EndHorizontal();
if (!serializedObject.isEditingMultipleObjects)
{
if (pb.source != null && pb.target != null && pb.source.GetPropertyType() != pb.target.GetPropertyType())
{
if (pb.direction == PropertyBinding.Direction.BiDirectional)
{
EditorGUILayout.HelpBox("Bi-Directional updates require both Source and Target to reference values of the same type.", MessageType.Error);
}
else if (pb.direction == PropertyBinding.Direction.SourceUpdatesTarget)
{
if (!PropertyReference.Convert(pb.source.Get(), pb.target.GetPropertyType()))
{
EditorGUILayout.HelpBox("Unable to convert " + pb.source.GetPropertyType() + " to " + pb.target.GetPropertyType(), MessageType.Error);
}
}
else if (!PropertyReference.Convert(pb.target.Get(), pb.source.GetPropertyType()))
{
EditorGUILayout.HelpBox("Unable to convert " + pb.target.GetPropertyType() + " to " + pb.source.GetPropertyType(), MessageType.Error);
}
}
}
serializedObject.ApplyModifiedProperties();
}
}