com.unity.uiextensions/Editor/RangeSliderEditor.cs

124 lines
4.6 KiB
C#
Raw Normal View History

Added Range Slider controller. Squashed commit of previous work. commit 6c5cf2dc036cf385b81fdfc8072300704b06b435 Merge: fb991af bf30261 Author: Ben MacKinnon <ben.mackinnon@soluis.com> Date: Tue Nov 12 17:54:34 2019 +0000 Merge branch 'refs/heads/master' into range-slider commit bf302616b8ae377a859d2012b856dc370efe40c2 Merge: 10919c6 76d2299 Author: Ben MacKinnon <bilmackinnon@googlemail.com> Date: Tue Nov 12 17:44:57 2019 +0000 Merge pull request #1 from Dover8/range-slider Range slider commit 76d22998d38801ab35ba19743d944263041924a5 Author: Ben MacKinnon <ben.mackinnon@soluis.com> Date: Tue Nov 12 17:36:23 2019 +0000 Updated PointerDown to update the target graphic Re-enabling colour tint interaction. commit 2d2ca219d5c0865ba4eaa428e8a167118aa06360 Author: Ben MacKinnon <ben.mackinnon@soluis.com> Date: Tue Nov 12 16:59:29 2019 +0000 Updated headers to match the standard format of the project commit 9a0d3f4aaddbcee2565693b0733c0001a2de2a90 Author: Ben MacKinnon <ben.mackinnon@soluis.com> Date: Tue Nov 12 16:43:22 2019 +0000 Some further default value set when creating a RangeSlider commit 748d1484568e16aa0bd2e3949330e48ce7245570 Author: Ben MacKinnon <ben.mackinnon@soluis.com> Date: Tue Nov 12 16:38:34 2019 +0000 Added the menu creation options for the Range Slider commit fa9e9beceede8c708529cd6a3ea98673b2d6d2c2 Author: Ben MacKinnon <ben.mackinnon@soluis.com> Date: Tue Nov 12 12:55:38 2019 +0000 Editor layout for the Range Slider Using the EditorGUILayout.MinMaxSlider to control the RangeSlider. It was this control that we are replicating in the UI. commit 32b731548e8e7f286964a4a7a35fd945e5d5a31a Author: Ben MacKinnon <ben.mackinnon@soluis.com> Date: Mon Nov 11 16:19:16 2019 +0000 Updated namespace and header commit 4d0fa2e7dc535b343cf10def6e01886383cc88ac Author: Ben MacKinnon <ben.mackinnon@soluis.com> Date: Mon Sep 16 12:41:45 2019 +0100 Added interaction Range slider is now interactable with both handles and the bar commit f4be93752719a08b95594e545eb16b27d3b3bcea Author: Ben MacKinnon <ben.mackinnon@soluis.com> Date: Fri Sep 13 15:27:15 2019 +0100 copied over the WIP RangeSlider from current project
2019-11-13 19:06:33 +08:00
/// Credit Ben MacKinnon @Dover8
/// Sourced from - https://github.com/Dover8/Unity-UI-Extensions/tree/range-slider
/// Usage: Extension of the standard slider. Two handles determine a low and high value between a Min and Max.
/// Raises a UnityEvent passing the low and high values
using UnityEditor;
using UnityEditor.UI;
namespace UnityEngine.UI.Extensions
{
[CustomEditor(typeof(RangeSlider), true)]
[CanEditMultipleObjects]
public class RangeSliderEditor : SelectableEditor
{
SerializedProperty m_LowHandleRect;
SerializedProperty m_HighHandleRect;
SerializedProperty m_FillRect;
SerializedProperty m_MinValue;
SerializedProperty m_MaxValue;
SerializedProperty m_WholeNumbers;
SerializedProperty m_LowValue;
SerializedProperty m_HighValue;
//need ref values for the editor MinMaxSlider
float low = 0;
float high = 1;
SerializedProperty m_OnValueChanged;
protected override void OnEnable()
{
base.OnEnable();
m_LowHandleRect = serializedObject.FindProperty("m_LowHandleRect");
m_HighHandleRect = serializedObject.FindProperty("m_HighHandleRect");
m_FillRect = serializedObject.FindProperty("m_FillRect");
m_MinValue = serializedObject.FindProperty("m_MinValue");
m_MaxValue = serializedObject.FindProperty("m_MaxValue");
m_WholeNumbers = serializedObject.FindProperty("m_WholeNumbers");
m_LowValue = serializedObject.FindProperty("m_LowValue");
low = m_LowValue.floatValue;
m_HighValue = serializedObject.FindProperty("m_HighValue");
high = m_HighValue.floatValue;
m_OnValueChanged = serializedObject.FindProperty("m_OnValueChanged");
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
EditorGUILayout.Space();
serializedObject.Update();
//grab the updated value affected by m_WholeNumbers
low = m_LowValue.floatValue;
high = m_HighValue.floatValue;
EditorGUILayout.PropertyField(m_LowHandleRect);
EditorGUILayout.PropertyField(m_HighHandleRect);
EditorGUILayout.PropertyField(m_FillRect);
if (m_LowHandleRect.objectReferenceValue != null && m_HighHandleRect.objectReferenceValue != null)
{
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(m_MinValue);
EditorGUILayout.PropertyField(m_MaxValue);
EditorGUILayout.PropertyField(m_WholeNumbers);
//We're going to do a fair bit of layout here
EditorGUILayout.BeginHorizontal();
//Low Label and value
EditorGUILayout.BeginVertical();
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
GUILayout.Label("Low");
GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();
low = EditorGUILayout.DelayedFloatField(low, GUILayout.MaxWidth(100));
EditorGUILayout.EndVertical();
GUILayout.FlexibleSpace();
//Slider
EditorGUILayout.BeginVertical();
GUILayout.FlexibleSpace();
EditorGUILayout.MinMaxSlider(ref low, ref high, m_MinValue.floatValue, m_MaxValue.floatValue, GUILayout.ExpandWidth(true));
EditorGUILayout.EndVertical();
GUILayout.FlexibleSpace();
//High label and value
EditorGUILayout.BeginVertical();
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
GUILayout.Label("High");
GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();
high = EditorGUILayout.DelayedFloatField(high, GUILayout.MaxWidth(100));
EditorGUILayout.EndVertical();
EditorGUILayout.EndHorizontal();
m_LowValue.floatValue = low;
m_HighValue.floatValue = high;
EditorGUILayout.Space();
EditorGUILayout.PropertyField(m_OnValueChanged);
}
else
{
EditorGUILayout.HelpBox("Specify a RectTransform for the RangeSlider fill or the RangeSlider handles or both. Each must have a parent RectTransform that it can slide within.", MessageType.Info);
}
serializedObject.ApplyModifiedProperties();
}
}
}