MayHeCome/Assets/Plugins/Febucci/Text Animator/Attributes/Editor/CharsDisplayTimeAttributeDrawer.cs

66 lines
2.2 KiB
C#
Raw Normal View History

2024-12-18 09:55:34 +00:00
using UnityEngine;
using UnityEditor;
namespace Febucci.Attributes
{
[CustomPropertyDrawer(typeof(CharsDisplayTimeAttribute))]
public class CharsDisplayTimeAttributeDrawer : PropertyDrawer
{
const float minWaitTime = 0.0001f;
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
//delay in seconds
Rect delayValueRect = new Rect(position.x, position.y, 70 + 230 - position.x, position.height);
delayValueRect.width = Mathf.Clamp(position.width * 0.6f, 170, position.width);
Rect delayLabel = new Rect(delayValueRect);
delayLabel.x += delayLabel.width - 15;
delayLabel.width = 77;
Rect charPerSecValueRect = new Rect(delayLabel);
charPerSecValueRect.x += charPerSecValueRect.width - 15;
charPerSecValueRect.width = 65;
Rect charPerSecLabelRect = new Rect(charPerSecValueRect);
charPerSecLabelRect.x += charPerSecLabelRect.width - 15;
charPerSecLabelRect.width = 120;
switch (property.propertyType)
{
case SerializedPropertyType.Float:
property.floatValue = EditorGUI.FloatField(delayValueRect, label, property.floatValue);
EditorGUI.LabelField(delayLabel, $"s delay, ≈");
int charPerSecond = Mathf.RoundToInt(1 / property.floatValue);
EditorGUI.LabelField(charPerSecLabelRect, "chars per sec");
EditorGUI.BeginChangeCheck();
charPerSecond = EditorGUI.IntField(charPerSecValueRect, charPerSecond);
if (EditorGUI.EndChangeCheck())
{
property.floatValue = 1f/charPerSecond;
}
if (property.floatValue < minWaitTime)
property.floatValue = minWaitTime;
break;
default: //unsupported, fallback to the default OnGUI
EditorGUI.PropertyField(position, property, label);
return;
}
}
}
}