2D-Platformer/Assets/Plugins/Light2D/Editor/PassToggleDrawer.cs
2022-02-12 12:53:50 +02:00

69 lines
No EOL
1.4 KiB
C#

using UnityEditor;
using UnityEngine;
namespace Light2D
{
public class PassToggleDrawer : MaterialPropertyDrawer
{
private string arg;
public PassToggleDrawer()
{
}
public PassToggleDrawer(string arg)
{
this.arg = arg;
}
static bool IsPropertyTypeSuitable(MaterialProperty prop)
{
return prop.type == MaterialProperty.PropType.Float || prop.type == MaterialProperty.PropType.Range;
}
public override void OnGUI(Rect position, MaterialProperty prop, string label, MaterialEditor editor)
{
if (!IsPropertyTypeSuitable(prop))
{
return;
}
// Setup
bool value = (prop.floatValue != 0.0f);
EditorGUI.BeginChangeCheck();
EditorGUI.showMixedValue = prop.hasMixedValue;
// Show the toggle control
value = EditorGUI.Toggle(position, label, value);
EditorGUI.showMixedValue = false;
if (EditorGUI.EndChangeCheck())
{
// Set the new value if it has changed
prop.floatValue = value ? 1.0f : 0.0f;
if (!string.IsNullOrWhiteSpace(arg))
{
foreach (Material target in prop.targets)
{
target.SetShaderPassEnabled(arg, value);
}
}
}
}
public override void Apply(MaterialProperty prop)
{
if (prop.hasMixedValue)
return;
if (!string.IsNullOrWhiteSpace(arg))
{
foreach (Material target in prop.targets)
{
target.SetShaderPassEnabled(arg, prop.floatValue != 0.0f);
}
}
}
}
}