You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
10 KiB
C#

using UnityEngine;
using UnityEditor;
using UnityEngine.Events;
namespace MalbersAnimations
{
[CustomPropertyDrawer(typeof(InputRow))]
public class InputRowDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
// EditorGUI.HelpBox(position, "",MessageType.None);
EditorGUI.BeginProperty(position, label, property);
var DefaultPosition = position;
var indent = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;
property.FindPropertyRelative("name").stringValue = label.text;
var height = EditorGUIUtility.singleLineHeight;
// Calculate rects
// var activeRect = new Rect(position.x, position.y, 15, height);
var LabelRect = new Rect(position.x /*+ 17*/, position.y, 100, height);
// Draw fields - passs GUIContent.none to each so they are drawn without labels
// EditorGUI.PropertyField(activeRect, property.FindPropertyRelative("active"), GUIContent.none);
EditorGUI.LabelField(LabelRect, label/*, EditorStyles.boldLabel*/);
//Set Rect to the Parameters Values
var posValue = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), new GUIContent(" "));
// Calculate rects
var typeRect = new Rect(posValue.x - 30, posValue.y, 44, height);
var valueRect = new Rect(posValue.x - 30 + 45, posValue.y, posValue.width / 2 - 11, height);
var ActionRect = new Rect(posValue.width / 2 + posValue.x - 30 + 40 - 5, posValue.y, (posValue.width / 2 - 7) - 16 , height);
var ShowRect = new Rect(DefaultPosition.width+2 , posValue.y, 16, height-1);
EditorGUI.PropertyField(typeRect, property.FindPropertyRelative("type"), GUIContent.none);
InputType current = (InputType)property.FindPropertyRelative("type").enumValueIndex;
switch (current)
{
case InputType.Input:
EditorGUI.PropertyField(valueRect, property.FindPropertyRelative("input"), GUIContent.none);
break;
case InputType.Key:
EditorGUI.PropertyField(valueRect, property.FindPropertyRelative("key"), GUIContent.none);
break;
default:
break;
}
EditorGUI.PropertyField(ActionRect, property.FindPropertyRelative("GetPressed"), GUIContent.none);
// SerializedProperty show = property.FindPropertyRelative("ShowEvents");
property.isExpanded = GUI.Toggle(ShowRect, property.isExpanded, new GUIContent("", "Show Events for the " +property.FindPropertyRelative("name").stringValue +" Input"), EditorStyles.foldout);
if (property.isExpanded)
{
DefaultPosition.y += height + 3;
Rect activeRectt = new Rect(position);
activeRectt.height = height;
activeRectt.y += height + 3;
EditorGUI.PropertyField(activeRectt, property.FindPropertyRelative("active"), new GUIContent("Active", "Enable Disable the Input"));
DefaultPosition.y += height + 3;
InputButton enumValueIndex = (InputButton)property.FindPropertyRelative("GetPressed").enumValueIndex;
var OnInputPressed = property.FindPropertyRelative("OnInputPressed");
var OnInputChanged = property.FindPropertyRelative("OnInputChanged");
var OnInputUp = property.FindPropertyRelative("OnInputUp");
var OnInputDown = property.FindPropertyRelative("OnInputDown");
switch (enumValueIndex)
{
case InputButton.Press:
EditorGUI.PropertyField(DefaultPosition, OnInputPressed);
DefaultPosition.y += EditorGUI.GetPropertyHeight(OnInputPressed);
EditorGUI.PropertyField(DefaultPosition, OnInputChanged);
DefaultPosition.y += EditorGUI.GetPropertyHeight(OnInputChanged);
EditorGUI.PropertyField(DefaultPosition, OnInputUp);
DefaultPosition.y += EditorGUI.GetPropertyHeight(OnInputUp);
EditorGUI.PropertyField(DefaultPosition, OnInputDown);
break;
case InputButton.Down:
EditorGUI.PropertyField(DefaultPosition, OnInputDown);
DefaultPosition.y += EditorGUI.GetPropertyHeight(OnInputDown);
EditorGUI.PropertyField(DefaultPosition, OnInputChanged);
break;
case InputButton.Up:
EditorGUI.PropertyField(DefaultPosition, OnInputUp);
DefaultPosition.y += EditorGUI.GetPropertyHeight(OnInputUp);
EditorGUI.PropertyField(DefaultPosition, OnInputChanged);
break;
case InputButton.LongPress:
Rect LonRect = DefaultPosition;
LonRect.height = height;
EditorGUI.PropertyField(LonRect, property.FindPropertyRelative("LongPressTime"), new GUIContent("Long Press Time", "Time the Input Should be Pressed"));
DefaultPosition.y += height + 3;
var OnLongPress = property.FindPropertyRelative("OnLongPress");
EditorGUI.PropertyField(DefaultPosition,OnLongPress , new GUIContent("On Long Press"));
DefaultPosition.y += EditorGUI.GetPropertyHeight(OnLongPress);
var OnPressedNormalized = property.FindPropertyRelative("OnPressedNormalized");
EditorGUI.PropertyField(DefaultPosition, OnPressedNormalized, new GUIContent("On Pressed Time Normalized"));
DefaultPosition.y += EditorGUI.GetPropertyHeight(OnPressedNormalized);
EditorGUI.PropertyField(DefaultPosition, OnInputDown, new GUIContent("On Pressed Down"));
DefaultPosition.y += EditorGUI.GetPropertyHeight(OnInputDown);
EditorGUI.PropertyField(DefaultPosition, OnInputUp, new GUIContent("On Pressed Interrupted"));
// DefaultPosition.y += EditorGUI.GetPropertyHeight(OnInputUp);
break;
case InputButton.DoubleTap:
Rect LonRect1 = DefaultPosition;
LonRect1.height = height;
EditorGUI.PropertyField(LonRect1, property.FindPropertyRelative("DoubleTapTime"), new GUIContent("Double Tap Time", "Time between the double tap"));
DefaultPosition.y += height + 3;
EditorGUI.PropertyField(DefaultPosition, OnInputDown, new GUIContent("On First Tap"));
DefaultPosition.y += EditorGUI.GetPropertyHeight(OnInputDown);
EditorGUI.PropertyField(DefaultPosition, property.FindPropertyRelative("OnDoubleTap"));
break;
default:
break;
}
}
// Set indent back to what it was
EditorGUI.indentLevel = indent;
EditorGUI.EndProperty();
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
float NewHeight = base.GetPropertyHeight(property, label) + 3;
if (property.isExpanded)
{
NewHeight += 16;
InputButton enumValueIndex = (InputButton)property.FindPropertyRelative("GetPressed").enumValueIndex;
NewHeight += 3;
var OnInputPressed = property.FindPropertyRelative("OnInputPressed");
var OnInputChanged = property.FindPropertyRelative("OnInputChanged");
var OnInputUp = property.FindPropertyRelative("OnInputUp");
var OnInputDown = property.FindPropertyRelative("OnInputDown");
var OnLongPress = property.FindPropertyRelative("OnLongPress");
var OnPressedNormalized = property.FindPropertyRelative("OnPressedNormalized");
switch (enumValueIndex)
{
case InputButton.Press:
NewHeight += EditorGUI.GetPropertyHeight(OnInputPressed);
NewHeight += EditorGUI.GetPropertyHeight(OnInputChanged);
NewHeight += EditorGUI.GetPropertyHeight(OnInputUp);
NewHeight += EditorGUI.GetPropertyHeight(OnInputDown);
break;
case InputButton.Down:
NewHeight += EditorGUI.GetPropertyHeight(OnInputDown);
NewHeight += EditorGUI.GetPropertyHeight(OnInputChanged);
break;
case InputButton.Up:
NewHeight += EditorGUI.GetPropertyHeight(OnInputUp);
NewHeight += EditorGUI.GetPropertyHeight(OnInputChanged);
break;
case InputButton.LongPress:
NewHeight += EditorGUIUtility.singleLineHeight + 3; //LongPressTime
NewHeight += EditorGUI.GetPropertyHeight(OnLongPress);
NewHeight += EditorGUI.GetPropertyHeight(OnPressedNormalized);
NewHeight += EditorGUI.GetPropertyHeight(OnInputUp);
NewHeight += EditorGUI.GetPropertyHeight(OnInputDown);
break;
case InputButton.DoubleTap:
NewHeight += EditorGUIUtility.singleLineHeight + 3; //LongPressTime
NewHeight += EditorGUI.GetPropertyHeight(OnInputDown);
NewHeight += EditorGUI.GetPropertyHeight(property.FindPropertyRelative("OnDoubleTap"));
break;
default:
break;
}
}
return NewHeight;
}
}
}