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.
107 lines
3.6 KiB
C#
107 lines
3.6 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
|
|
namespace MalbersAnimations.Controller
|
|
{
|
|
[CustomPropertyDrawer(typeof(MPivots))]
|
|
public class MPivotDrawer : PropertyDrawer
|
|
{
|
|
|
|
/// <summary>
|
|
/// Options to display in the popup to select constant or variable.
|
|
/// </summary>
|
|
private readonly string[] popupOptions =
|
|
{ "Position", "Direction" , "Pivot Color" };
|
|
|
|
/// <summary> Cached style to use to draw the popup button. </summary>
|
|
private GUIStyle popupStyle;
|
|
|
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
|
{
|
|
|
|
if (popupStyle == null)
|
|
{
|
|
popupStyle = new GUIStyle(GUI.skin.GetStyle("PaneOptions"))
|
|
{
|
|
imagePosition = ImagePosition.ImageOnly
|
|
};
|
|
}
|
|
|
|
var height = EditorGUIUtility.singleLineHeight;
|
|
|
|
var indent = EditorGUI.indentLevel;
|
|
EditorGUI.indentLevel = 0;
|
|
|
|
var with = position.width + 55;
|
|
var PosX = position.x;
|
|
|
|
|
|
var nameRect = new Rect(PosX-10, position.y, with / 2 - 125, height);
|
|
var vectorRect = new Rect(with / 2 - 45, position.y, with / 2-20, height);
|
|
var multiplierRect = new Rect(with - 55, position.y, 50, height);
|
|
var button = new Rect(with, position.y, 18, height);
|
|
|
|
|
|
// Calculate rect for configuration button
|
|
Rect buttonRect = new Rect(vectorRect);
|
|
buttonRect.yMin += popupStyle.margin.top;
|
|
buttonRect.width = popupStyle.fixedWidth + popupStyle.margin.right;
|
|
buttonRect.x -= 20;
|
|
|
|
EditorGUI.BeginProperty(position, label, property);
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
|
|
|
|
|
|
var name = property.FindPropertyRelative("name");
|
|
var vectorPos = property.FindPropertyRelative("position");
|
|
var vectorDir = property.FindPropertyRelative("dir");
|
|
var multiplie = property.FindPropertyRelative("multiplier");
|
|
var modifyGizmo = property.FindPropertyRelative("EditorModify");
|
|
var PivotColor = property.FindPropertyRelative("PivotColor");
|
|
var EditorDisplay = property.FindPropertyRelative("EditorDisplay");
|
|
|
|
|
|
|
|
//EditorGUI.HelpBox(buttonRect, "SD", MessageType.None);
|
|
|
|
EditorDisplay.intValue = EditorGUI.Popup(buttonRect, EditorDisplay.intValue, popupOptions, popupStyle);
|
|
|
|
EditorGUI.PropertyField(nameRect, name, GUIContent.none);
|
|
|
|
if (EditorDisplay.intValue == 0)
|
|
{
|
|
EditorGUI.PropertyField(vectorRect, vectorPos, GUIContent.none);
|
|
}
|
|
else if (EditorDisplay.intValue == 1)
|
|
{
|
|
EditorGUI.PropertyField(vectorRect, vectorDir, GUIContent.none);
|
|
}
|
|
|
|
else if (EditorDisplay.intValue == 2)
|
|
{
|
|
EditorGUI.PropertyField(vectorRect, PivotColor, GUIContent.none);
|
|
}
|
|
|
|
|
|
EditorGUIUtility.labelWidth = 15;
|
|
EditorGUI.PropertyField(multiplierRect, multiplie, new GUIContent("M","Multiplier"));
|
|
|
|
|
|
modifyGizmo.boolValue = GUI.Toggle(button, modifyGizmo.boolValue, new GUIContent("•","Edit on the Scene"), EditorStyles.miniButton);
|
|
|
|
EditorGUIUtility.labelWidth = 0;
|
|
|
|
if (EditorGUI.EndChangeCheck())
|
|
property.serializedObject.ApplyModifiedProperties();
|
|
|
|
EditorGUI.indentLevel = indent;
|
|
EditorGUI.EndProperty();
|
|
|
|
}
|
|
}
|
|
} |