BITFALL/Assets/Plugins/Le Tai's Asset/TranslucentImage/Script/Editor/ScalableBlurConfigEditor.cs

134 lines
3.6 KiB
C#

using UnityEditor;
using UnityEditor.AnimatedValues;
using UnityEngine;
namespace LeTai.Asset.TranslucentImage.Editor
{
[CustomEditor(typeof(ScalableBlurConfig))]
[CanEditMultipleObjects]
public class ScalableBlurConfigEditor : UnityEditor.Editor
{
readonly GUIContent radiusLabel = new GUIContent(
"Radius",
"Blurriness. Does NOT affect performance"
);
readonly GUIContent iterationLabel = new GUIContent(
"Iteration",
"The number of times to run the algorithm to increase the smoothness of the effect. Can affect performance when increase"
);
readonly GUIContent depthLabel = new GUIContent(
"Max Depth",
"Decrease will reduce flickering, blurriness and performance"
);
readonly AnimBool useAdvancedControl = new AnimBool(false);
int tab, previousTab;
public void Awake()
{
LoadTabSelection();
useAdvancedControl.value = tab > 0;
}
public void OnEnable()
{
// Without this editor will not Repaint automatically when animating
useAdvancedControl.valueChanged.AddListener(Repaint);
}
public override void OnInspectorGUI()
{
ScalableBlurConfig config = (ScalableBlurConfig) target;
Draw(config);
}
public void Draw(ScalableBlurConfig config)
{
Undo.RecordObject(target, "Modify Blur Config");
using (var v = new EditorGUILayout.VerticalScope())
{
EditorGUILayout.Space();
DrawTabBar();
EditorGUILayout.Space();
using (var changes = new EditorGUI.ChangeCheckScope())
{
DrawTabsContent(config);
EditorGUILayout.Space();
config.MaxDepth = EditorGUILayout.IntField(depthLabel, config.MaxDepth);
EditorGUILayout.Space();
if (changes.changed)
{
EditorUtility.SetDirty(target);
}
}
}
}
void DrawTabBar()
{
using (var h = new EditorGUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
tab = GUILayout.Toolbar(
tab,
new[] {"Simple", "Advanced"},
GUILayout.MinWidth(0),
GUILayout.MaxWidth(EditorGUIUtility.pixelsPerPoint * 192)
);
GUILayout.FlexibleSpace();
}
if (tab != previousTab)
{
GUI.FocusControl(""); // Defocus
SaveTabSelection();
previousTab = tab;
}
useAdvancedControl.target = tab == 1;
}
void DrawTabsContent(ScalableBlurConfig config)
{
//Simple tab
if (EditorGUILayout.BeginFadeGroup(1 - useAdvancedControl.faded))
{
config.Strength = Mathf.Max(0, EditorGUILayout.FloatField("Strength", config.Strength));
}
EditorGUILayout.EndFadeGroup();
//Advanced tab
if (EditorGUILayout.BeginFadeGroup(useAdvancedControl.faded))
{
config.Radius = EditorGUILayout.FloatField(radiusLabel, config.Radius);
config.Iteration = EditorGUILayout.IntSlider(iterationLabel, config.Iteration, 0, 6);
}
EditorGUILayout.EndFadeGroup();
}
//Persist selected tab between sessions and instances
void SaveTabSelection()
{
EditorPrefs.SetInt("LETAI_TRANSLUCENTIMAGE_TIS_TAB", tab);
}
void LoadTabSelection()
{
if (EditorPrefs.HasKey("LETAI_TRANSLUCENTIMAGE_TIS_TAB"))
tab = EditorPrefs.GetInt("LETAI_TRANSLUCENTIMAGE_TIS_TAB");
}
}
}