Files
ichni_Official/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringDebugPropertyDrawer.cs
SoulliesOfficial d4e860fa16 initial
2025-06-03 02:42:28 -04:00

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();
}
}
}