66 lines
2.2 KiB
C#
66 lines
2.2 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} |