using System; using UnityEditor; using UnityEngine; namespace Unity.VisualScripting { public abstract class ContinuousNumberInspector : Inspector { protected ContinuousNumberInspector(Metadata metadata) : base(metadata) { } protected override void OnGUI(Rect position, GUIContent label) { position = BeginLabeledBlock(metadata, position, label); T newValue; var fieldPosition = new Rect ( position.x, position.y, position.width, EditorGUIUtility.singleLineHeight ); if (metadata.HasAttribute()) { var rangeAttribute = metadata.GetAttribute(); newValue = (T)Convert.ChangeType(EditorGUI.Slider(fieldPosition, Convert.ToSingle(metadata.value), rangeAttribute.min, rangeAttribute.max), typeof(T)); } else { if (Is64Bits(metadata.value)) { newValue = (T)Convert.ChangeType(LudiqGUI.DraggableLongField(fieldPosition, Convert.ToInt64(metadata.value)), typeof(T)); } else { newValue = (T)Convert.ChangeType(LudiqGUI.DraggableFloatField(fieldPosition, Convert.ToSingle(metadata.value)), typeof(T)); } } if (EndBlock(metadata)) { metadata.RecordUndo(); metadata.value = newValue; } } protected override void OnEditorPrefGUI(Rect position, GUIContent label) { BeginBlock(metadata, position); T newValue; var fieldPosition = new Rect ( position.x, position.y, position.width, EditorGUIUtility.singleLineHeight - 2 ); if (metadata.HasAttribute()) { var rangeAttribute = metadata.GetAttribute(); newValue = (T)Convert.ChangeType(EditorGUI.Slider(fieldPosition, label, Convert.ToSingle(metadata.value), rangeAttribute.min, rangeAttribute.max), typeof(T)); } else { if (Is64Bits(metadata.value)) { newValue = (T)Convert.ChangeType(LudiqGUI.DraggableLongField(fieldPosition, Convert.ToInt64(metadata.value), label), typeof(T)); } else { newValue = (T)Convert.ChangeType(LudiqGUI.DraggableFloatField(fieldPosition, Convert.ToSingle(metadata.value), label), typeof(T)); } } if (EndBlock(metadata)) { metadata.RecordUndo(); metadata.value = newValue; } } static bool Is64Bits(object value) { return value is long || value is ulong; } protected override float GetHeight(float width, GUIContent label) { return HeightWithLabel(metadata, width, EditorGUIUtility.singleLineHeight, label); } public override float GetAdaptiveWidth() { if (metadata.HasAttribute()) { return 100; } else { return LudiqGUI.GetTextFieldAdaptiveWidth(metadata.value); } } } }