72 lines
2.0 KiB
C#
72 lines
2.0 KiB
C#
using MoreMountains.Tools;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace MoreMountains.Feedbacks
|
|
{
|
|
[CustomPropertyDrawer(typeof(MMSpringDebug))]
|
|
public class MMSpringDebugPropertyDrawer : PropertyDrawer
|
|
{
|
|
protected Color _backgroundBarColor = new Color(0f, 0f, 0f, 0.3f);
|
|
protected Color _frontBarColor = MMColors.Yellow;
|
|
|
|
protected SerializedProperty _currentValue;
|
|
protected SerializedProperty _targetValue;
|
|
|
|
protected Rect _rect;
|
|
protected float _lastTarget;
|
|
protected float _max;
|
|
|
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
|
{
|
|
_currentValue = property.FindPropertyRelative("CurrentValue");
|
|
_targetValue = property.FindPropertyRelative("TargetValue");
|
|
|
|
EditorGUI.BeginProperty(position, label, property);
|
|
EditorGUI.BeginDisabledGroup(true);
|
|
position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
|
|
var indent = EditorGUI.indentLevel;
|
|
EditorGUI.indentLevel = 0;
|
|
|
|
_rect.x = position.x;
|
|
_rect.y = position.y;
|
|
_rect.width = position.width;
|
|
_rect.height = position.height;
|
|
EditorGUI.DrawRect(_rect, _backgroundBarColor);
|
|
|
|
if (Application.isPlaying)
|
|
{
|
|
float current = _currentValue.floatValue;
|
|
float target = _targetValue.floatValue;
|
|
float normalizedValue = 0f;
|
|
float diff = target - current;
|
|
if (Mathf.Abs(diff) > Mathf.Abs(_max))
|
|
{
|
|
_max = diff;
|
|
}
|
|
|
|
if (_lastTarget != target)
|
|
{
|
|
_max = diff;
|
|
}
|
|
|
|
normalizedValue = MMMaths.Remap(diff, -_max, _max, -1f, 1f);
|
|
|
|
float newWidth = MMMaths.Remap(normalizedValue, -1f, 1f, -position.width/2f, position.width/2f);
|
|
_rect.x = position.x + (position.width/2f);
|
|
_rect.y = position.y;
|
|
_rect.width = newWidth;
|
|
_rect.height = position.height;
|
|
EditorGUI.DrawRect(_rect, _frontBarColor);
|
|
|
|
_lastTarget = target;
|
|
}
|
|
|
|
EditorGUI.indentLevel = indent;
|
|
EditorGUI.EndDisabledGroup();
|
|
EditorGUI.EndProperty();
|
|
|
|
}
|
|
}
|
|
}
|