WuhuIslandTesting/Library/PackageCache/com.unity.render-pipelines.universal@8148.0.7-4/Editor/ShaderGUI/UIClasses/MaterialEmissionFlagsField.cs
2025-01-07 02:06:59 +01:00

92 lines
3.5 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using Unity.Collections.LowLevel.Unsafe;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
namespace UnityEditor.SLZMaterialUI
{
public class MaterialEmissionFlagsField : VisualElement
{
static EnumFieldUtils.EnumData s_EmissionFlags;
static EnumFieldUtils.EnumData emissionFlags
{
get
{
if (s_EmissionFlags == null)
{
s_EmissionFlags = new EnumFieldUtils.EnumData()
{
values = new Enum[] { MaterialGlobalIlluminationFlags.EmissiveIsBlack, MaterialGlobalIlluminationFlags.RealtimeEmissive, MaterialGlobalIlluminationFlags.BakedEmissive },
flagValues = new int[] { 0, 1, 2 },
displayNames = new string[] { "None", "Realtime", "Baked" },
names = new string[] { "EmissiveIsBlack", "RealtimeEmissive", "BakedEmissive" },
tooltip = new string[] { "Emission will not emit light during light baking", "Emission will be treated as a real-time source when baking realtime GI", "Emission will emit light when baking lighting" },
flags = true,
underlyingType = typeof(MaterialGlobalIlluminationFlags),
unsigned = false,
serializable = true,
};
}
return s_EmissionFlags;
}
}
static object s_BoxedEnumData;
static object boxedEnumData
{
get
{
if (s_BoxedEnumData == null)
{
s_BoxedEnumData = EnumFieldUtils.GetBoxedEnumData(emissionFlags);
}
return s_BoxedEnumData;
}
}
static Action<EnumField, Enum> s_UpdateValueLabelAction;
static Action<EnumField, Enum> UpdateValueLabelAction
{
get
{
if (s_UpdateValueLabelAction == null)
{
MethodInfo updateValueInfo = typeof(EnumField).GetMethod("UpdateValueLabel", BindingFlags.Instance | BindingFlags.NonPublic);
s_UpdateValueLabelAction = (Action<EnumField, Enum>) updateValueInfo.CreateDelegate(typeof(Action<EnumField, Enum>));
}
return s_UpdateValueLabelAction;
}
}
public EnumField internalField;
public MaterialEmissionFlagsField(string label, MaterialGlobalIlluminationFlags defaultValue)
{
internalField = new EnumField(label, defaultValue);
SetEnumData(internalField);
EnumFieldUtils.UpdateValueLabelAction(internalField, defaultValue);
VisualElement labelElement = internalField.ElementAt(0);
labelElement.AddToClassList("materialGUILeftBox");
labelElement.style.overflow = Overflow.Hidden;
labelElement.style.minWidth = 0;
VisualElement dropdownElement = internalField.ElementAt(1);
dropdownElement.AddToClassList("materialGUIRightBox");
style.justifyContent = Justify.FlexStart;
Add(internalField);
}
public void SetEnumData(EnumField field)
{
EnumFieldUtils.enumDataField.SetValue(field, boxedEnumData);
}
}
}