diff options
author | chai <chaifix@163.com> | 2020-10-15 07:24:10 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-10-15 07:24:10 +0800 |
commit | e846c64d6f927879cb8a095e62d773a8d7b3c9f4 (patch) | |
tree | 7882744bbf2b6c7096ec15fb300f088c5a0807c5 /Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs | |
parent | cd12e74241678ee3c0752484d310b202187ba24c (diff) |
*ability system
Diffstat (limited to 'Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs')
-rw-r--r-- | Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs new file mode 100644 index 00000000..0f540c19 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs @@ -0,0 +1,109 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class RangeIntEditor : FieldEditor + { + public override Type[] EditedTypes + { + get { return new Type[] { typeof(RangeInt) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + RangeValueAttribute range = field.GetAttribute<RangeValueAttribute>(); + if (range == null) + return; + + EditorGUILayout.BeginHorizontal(); + + RangeInt[] ranges = field.GetValues<RangeInt>(); + + int[] mins = new int[ranges.Length]; + int[] maxs = new int[ranges.Length]; + int min = ranges[0].min; + int max = ranges[0].max; + bool different = false; + + for (int i = 0; i < ranges.Length; i++) + { + mins[i] = ranges[i].min; + maxs[i] = ranges[i].max; + if (ranges[i].min != min || ranges[0].max != max) + different = true; + } + + if (IntegerEditor.DrawInt("", mins, out min, GUILayout.Width(64))) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeInt(min, ranges[i].max)); + + EditorGUI.BeginChangeCheck(); + float fMin = min; + float fMax = max; + EditorGUI.showMixedValue = different; + EditorGUILayout.MinMaxSlider(ref fMin, ref fMax, range.Min, range.Max); + if (EditorGUI.EndChangeCheck() && min < max) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeInt((int)fMin, (int)fMax)); + + if (IntegerEditor.DrawInt("", maxs, out max, GUILayout.Width(64))) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeInt(ranges[i].min, max)); + + EditorGUILayout.EndHorizontal(); + } + } + + public class RangeFloatEditor : FieldEditor + { + public override Type[] EditedTypes + { + get { return new Type[] { typeof(RangeFloat) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + RangeValueAttribute range = field.GetAttribute<RangeValueAttribute>(); + if (range == null) + return; + + EditorGUILayout.BeginHorizontal(); + + RangeFloat[] ranges = field.GetValues<RangeFloat>(); + + float[] mins = new float[ranges.Length]; + float[] maxs = new float[ranges.Length]; + float min = ranges[0].min; + float max = ranges[0].max; + bool different = false; + + for (int i = 0; i < ranges.Length; i++) + { + mins[i] = ranges[i].min; + maxs[i] = ranges[i].max; + if (ranges[i].min != min || ranges[0].max != max) + different = true; + } + + if (FloatEditor.DrawFloat("", mins, out min, GUILayout.Width(64))) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeFloat(min, ranges[i].max)); + + EditorGUI.BeginChangeCheck(); + EditorGUI.showMixedValue = different; + EditorGUILayout.MinMaxSlider(ref min, ref max, range.Min, range.Max); + if (EditorGUI.EndChangeCheck() && min < max) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeFloat(min, max)); + + if (FloatEditor.DrawFloat("", maxs, out max, GUILayout.Width(64))) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeFloat(ranges[i].min, max)); + + EditorGUILayout.EndHorizontal(); + } + } +}
\ No newline at end of file |