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.

134 lines
6.1 KiB
C#

3 years ago
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace MalbersAnimations.Controller
{
[CustomPropertyDrawer(typeof(MSpeed))]
public class MSpeedDrawer : PropertyDrawer
{
const float labelwith = 30f;
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
position.y += 2;
EditorGUI.BeginProperty(position, label, property);
{
// GUI.Box(position, GUIContent.none, EditorStyles.foldoutHeader);
var indent = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;
var height = EditorGUIUtility.singleLineHeight;
var vertical = property.FindPropertyRelative("Vertical");
var strafe = property.FindPropertyRelative("strafeSpeed");
var strafeLerp = property.FindPropertyRelative("lerpStrafe");
var positionS = property.FindPropertyRelative("position");
var lerpPosition = property.FindPropertyRelative("lerpPosition");
var lerpPosAnim = property.FindPropertyRelative("lerpPosAnim");
var rotation = property.FindPropertyRelative("rotation");
var lerpRotation = property.FindPropertyRelative("lerpRotation");
var lerpRotAnim = property.FindPropertyRelative("lerpRotAnim");
var animator = property.FindPropertyRelative("animator");
var lerpAnimator = property.FindPropertyRelative("lerpAnimator");
var name = property.FindPropertyRelative("name");
if (string.IsNullOrEmpty(name.stringValue)) name.stringValue = "NameHere";
var line = position;
line.height = height;
line.x += 4;
line.width -= 8;
var foldout = line;
foldout.width = 10;
var rectName = new Rect(line);
// rectName.width -= 15;
GUI.Box(rectName, GUIContent.none, EditorStyles.foldoutHeader);
rectName.x += 20;
name.stringValue = GUI.TextField(rectName, name.stringValue, EditorStyles.boldLabel);
property.isExpanded = EditorGUI.Toggle(foldout, GUIContent.none, property.isExpanded, EditorStyles.foldoutHeader);
line.y += height + 2;
if (property.isExpanded)
{
var Deflabelwith = 100f;
EditorGUIUtility.labelWidth = Deflabelwith;
EditorGUI.PropertyField(line, vertical, new GUIContent("Vertical Speed", "Vertical Mutliplier for the Animator"));
line.y += height + 2;
float lerpSize = 0.5f * (line.width / 3) - 2;
var MainRect = new Rect(line.x, line.y, line.width - (lerpSize * 2) - 5, height);
var lerpRect = new Rect(line.x + line.width - lerpSize + 2, line.y, lerpSize, height);
var AnimRect = new Rect(line.x + line.width - (lerpSize * 2) + 2, line.y, lerpSize, height);
EditorGUI.PropertyField(MainRect, positionS, new GUIContent("Position", "Additional " + name.stringValue + " Speed added to the position"));
EditorGUIUtility.labelWidth = labelwith;
EditorGUI.PropertyField(AnimRect, lerpPosAnim, new GUIContent("A", "Position " + name.stringValue + " Lerp interpolation for the ANIMATOR, higher value more Responsiveness"));
EditorGUI.PropertyField(lerpRect, lerpPosition, new GUIContent(" L", "Position " + name.stringValue + " Lerp interpolation, higher value more Responsiveness"));
EditorGUIUtility.labelWidth = Deflabelwith;
line.y += height + 2;
MainRect.y += height + 2;
lerpRect.y += height + 2;
AnimRect.y += height + 2;
EditorGUI.PropertyField(MainRect, rotation, new GUIContent("Rotation", "Additional " + name.stringValue + " Speed added to the Rotation"));
EditorGUIUtility.labelWidth = labelwith;
EditorGUI.PropertyField(AnimRect, lerpRotAnim, new GUIContent("A", "Rotation " + name.stringValue + " Lerp interpolation for the ANIMATOR, higher value more Responsiveness"));
EditorGUI.PropertyField(lerpRect, lerpRotation, new GUIContent(" L", "Rotation " + name.stringValue + " Lerp interpolation, higher value more Responsiveness"));
EditorGUIUtility.labelWidth = Deflabelwith;
line.y += height + 2;
MainRect = new Rect(line.x, line.y, line.width - (lerpSize), height);
lerpRect = new Rect(line.x + line.width - lerpSize + 2, line.y, lerpSize, height);
EditorGUI.PropertyField(MainRect, animator, new GUIContent("Animator", "Additional " + name.stringValue + " Speed added to the Animator"));
EditorGUIUtility.labelWidth = labelwith;
EditorGUI.PropertyField(lerpRect, lerpAnimator, new GUIContent(" L", "Animator " + name.stringValue + " Lerp interpolation, higher value more Responsiveness"));
EditorGUIUtility.labelWidth = Deflabelwith;
line.y += height + 2;
MainRect.y += height + 2;
lerpRect.y += height + 2;
EditorGUI.PropertyField(MainRect, strafe, new GUIContent("Strafe", "Strafe Movement Position"));
EditorGUIUtility.labelWidth = labelwith;
EditorGUI.PropertyField(lerpRect, strafeLerp, new GUIContent(" L", "Strafe Movement Lerp Interpolation"));
EditorGUIUtility.labelWidth = 0;
}
EditorGUI.indentLevel = indent;
}
EditorGUI.EndProperty();
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
if (!property.isExpanded) return base.GetPropertyHeight(property, label);
return 16 * 6 + 25;
}
}
}