Skip to content

Instantly share code, notes, and snippets.

@Schwapo
Last active September 19, 2021 19:05
Show Gist options
  • Save Schwapo/1d8241b91dd8506618f2f8942f8e071b to your computer and use it in GitHub Desktop.
Save Schwapo/1d8241b91dd8506618f2f8942f8e071b to your computer and use it in GitHub Desktop.
using System;
using UnityEngine;
using System.Diagnostics;
#if UNITY_EDITOR
using Sirenix.OdinInspector.Editor;
using Sirenix.OdinInspector.Editor.ActionResolvers;
using Sirenix.OdinInspector.Editor.ValueResolvers;
using Sirenix.Utilities.Editor;
using NamedValue = Sirenix.OdinInspector.Editor.ActionResolvers.NamedValue;
#endif
[Conditional("UNITY_EDITOR")]
[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
public class MinMaxRangeSliderAttribute : Attribute
{
public readonly string Limits;
public readonly string Getter;
public readonly string Setter;
public readonly bool ShowFields;
public MinMaxRangeSliderAttribute(
string getter, string setter, string limits, bool showFields = false)
{
Getter = getter;
Setter = setter;
Limits = limits;
ShowFields = showFields;
}
}
#if UNITY_EDITOR
public class MinMaxRangeSliderAttributeDrawer
: OdinAttributeDrawer<MinMaxRangeSliderAttribute, Range>
{
private ValueResolver<Vector2> limitsResolver;
private ValueResolver<Vector2> getterResolver;
private ActionResolver setterResolver;
protected override void Initialize()
{
limitsResolver = ValueResolver.Get<Vector2>(Property, Attribute.Limits);
getterResolver = ValueResolver.Get<Vector2>(Property, Attribute.Getter);
var namedValue = new NamedValue("value", typeof(Vector2));
setterResolver = ActionResolver.Get(Property, Attribute.Setter, namedValue);
}
protected override void DrawPropertyLayout(GUIContent label)
{
ValueResolver.DrawErrors(limitsResolver, getterResolver, setterResolver);
var limits = limitsResolver.GetValue();
var value = getterResolver.GetValue();
var newValue = SirenixEditorFields.MinMaxSlider(
label, value, limits, Attribute.ShowFields);
setterResolver.Context.NamedValues.Set("value", newValue);
setterResolver.DoActionForAllSelectionIndices();
}
}
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment