maint: added minmaxslider package

This commit is contained in:
Chris
2025-07-19 11:35:15 -04:00
parent 185580c3af
commit 8a2d1bf64a
16 changed files with 504 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
using UnityEngine;
using UnityEditor;
using GD.MinMaxSlider;
[CustomPropertyDrawer(typeof(MinMaxSliderAttribute))]
public class MinMaxSliderDrawer : PropertyDrawer {
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){
var minMaxAttribute = (MinMaxSliderAttribute)attribute;
var propertyType = property.propertyType;
label.tooltip = minMaxAttribute.min.ToString("F2") + " to " + minMaxAttribute.max.ToString("F2");
//PrefixLabel returns the rect of the right part of the control. It leaves out the label section. We don't have to worry about it. Nice!
Rect controlRect = EditorGUI.PrefixLabel(position, label);
Rect[] splittedRect = SplitRect(controlRect,3);
if(propertyType == SerializedPropertyType.Vector2){
EditorGUI.BeginChangeCheck();
Vector2 vector = property.vector2Value;
float minVal = vector.x;
float maxVal = vector.y;
//F2 limits the float to two decimal places (0.00).
minVal = EditorGUI.FloatField(splittedRect[0], float.Parse(minVal.ToString("F2")));
maxVal = EditorGUI.FloatField(splittedRect[2], float.Parse(maxVal.ToString("F2")));
EditorGUI.MinMaxSlider(splittedRect[1], ref minVal, ref maxVal,
minMaxAttribute.min,minMaxAttribute.max);
if(minVal < minMaxAttribute.min){
minVal = minMaxAttribute.min;
}
if(maxVal > minMaxAttribute.max){
maxVal = minMaxAttribute.max;
}
vector = new Vector2(minVal > maxVal ? maxVal : minVal, maxVal);
if(EditorGUI.EndChangeCheck()){
property.vector2Value = vector;
}
}else if(propertyType == SerializedPropertyType.Vector2Int){
EditorGUI.BeginChangeCheck();
Vector2Int vector = property.vector2IntValue;
float minVal = vector.x;
float maxVal = vector.y;
minVal = EditorGUI.FloatField(splittedRect[0], minVal);
maxVal = EditorGUI.FloatField(splittedRect[2], maxVal);
EditorGUI.MinMaxSlider(splittedRect[1], ref minVal, ref maxVal,
minMaxAttribute.min,minMaxAttribute.max);
if(minVal < minMaxAttribute.min){
maxVal = minMaxAttribute.min;
}
if(minVal > minMaxAttribute.max){
maxVal = minMaxAttribute.max;
}
vector = new Vector2Int(Mathf.FloorToInt(minVal > maxVal ? maxVal : minVal), Mathf.FloorToInt(maxVal));
if(EditorGUI.EndChangeCheck()){
property.vector2IntValue = vector;
}
}
}
Rect[] SplitRect(Rect rectToSplit, int n){
Rect[] rects = new Rect[n];
for(int i = 0; i < n; i++){
rects[i] = new Rect(rectToSplit.position.x + (i * rectToSplit.width / n), rectToSplit.position.y, rectToSplit.width / n, rectToSplit.height);
}
int padding = (int)rects[0].width - 40;
int space = 5;
rects[0].width -= padding + space;
rects[2].width -= padding + space;
rects[1].x -= padding;
rects[1].width += padding * 2;
rects[2].x += padding + space;
return rects;
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e6b53f69308943e499e344adc5adee79
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: