Files
YachtDice/Assets/Plugins/AllIn13DShader/Editor/AllIn13DShaderInspectorReferences.cs
T
2026-02-23 22:01:07 +07:00

194 lines
4.4 KiB
C#

using UnityEditor;
using UnityEngine;
namespace AllIn13DShader
{
public class AllIn13DShaderInspectorReferences
{
public MaterialProperty[] matProperties;
public string[] oldKeyWords;
public AbstractMaterialInfo[] targetMatInfos;
public Material materialWithDefaultValues;
public MaterialEditor editorMat;
//Styles
private const int bigFontSize = 16, smallFontSize = 11;
public GUIStyle propertiesStyle, bigLabelStyle, smallLabelStyle, toggleButtonStyle, tabButtonStyle;
//Outline Effect
public AllIn13DEffectConfig outlineEffectConfig;
//Cast Shadows Effect
public AllIn13DEffectConfig castShadowsEffectConfig;
//Effects Profile Collection
public EffectsProfileCollection effectsProfileCollection;
public AllIn13DShaderInspectorReferences()
{
propertiesStyle = new GUIStyle(EditorStyles.helpBox);
propertiesStyle.margin = new RectOffset(0, 0, 0, 0);
bigLabelStyle = new GUIStyle(EditorStyles.boldLabel);
bigLabelStyle.fontSize = bigFontSize;
smallLabelStyle = new GUIStyle(EditorStyles.boldLabel);
smallLabelStyle.fontSize = smallFontSize;
toggleButtonStyle = new GUIStyle(GUI.skin.button) { alignment = TextAnchor.MiddleCenter, richText = true };
tabButtonStyle = new GUIStyle(GUI.skin.button) { fontSize = 10 };
}
public void Setup(MaterialEditor materialEditor, MaterialProperty[] properties)
{
this.editorMat = materialEditor;
if (this.targetMatInfos == null)
{
this.targetMatInfos = new AbstractMaterialInfo[materialEditor.targets.Length];
for (int i = 0; i < materialEditor.targets.Length; i++)
{
Material mat = (Material)materialEditor.targets[i];
targetMatInfos[i] = AbstractMaterialInfo.CreateInstance(mat);
}
materialWithDefaultValues = new Material(targetMatInfos[0].mat.shader);
}
this.effectsProfileCollection = GlobalConfiguration.instance.effectsProfileCollection;
this.matProperties = properties;
}
public void SetOutlineEffect(PropertiesConfig propertiesConfig)
{
this.outlineEffectConfig = propertiesConfig.FindEffectConfigByID("OUTLINETYPE");
}
public void SetCastShadowsEffect(PropertiesConfig propertiesConfig)
{
this.castShadowsEffectConfig = propertiesConfig.FindEffectConfigByID("CAST_SHADOWS_ON");
}
public void SetMaterialsDirty()
{
for(int i = 0; i < targetMatInfos.Length; i++)
{
EditorUtility.SetDirty(targetMatInfos[i].mat);
}
}
public Shader GetShader()
{
return targetMatInfos[0].mat.shader;
}
public bool IsKeywordEnabled(string keyword)
{
bool res = true;
for(int i = 0; i < targetMatInfos.Length; i++)
{
res = res && targetMatInfos[i].IsKeywordEnabled(keyword);
}
return res;
}
public void RefreshMaterialKeywords()
{
for(int i = 0; i < this.targetMatInfos.Length; i++)
{
this.targetMatInfos[i].RefreshKeywords();
}
}
public bool IsShaderVariant()
{
bool res = true;
for(int i = 0; i < targetMatInfos.Length; i++)
{
res = res && targetMatInfos[i].IsShaderVariant();
}
return res;
}
public bool IsEffectEnabled(AllIn13DEffectConfig effectConfig, ref int selectedIndex)
{
bool res = true;
for (int i = 0; i < targetMatInfos.Length; i++)
{
int enumIdx = -1;
AbstractMaterialInfo matInfo = targetMatInfos[i];
bool effectEnabled = AllIn13DEffectConfig.IsEffectEnabled(effectConfig, ref enumIdx, matInfo);
if (i == 0)
{
selectedIndex = enumIdx;
}
else
{
res = res && (enumIdx == selectedIndex);
}
}
return res;
}
public bool IsEffectPropertyEnabled(EffectProperty effectProperty, ref int selectedIndex)
{
bool res = true;
for (int i = 0; i < targetMatInfos.Length; i++)
{
int enumIdx = 0;
AbstractMaterialInfo matInfo = targetMatInfos[i];
res = res && AllIn13DEffectConfig.IsEffectPropertyEnabled(effectProperty, ref enumIdx, matInfo);
if (i == 0)
{
selectedIndex = enumIdx;
}
else
{
res = res && (enumIdx == selectedIndex);
}
}
return res;
}
public bool AreAllMaterialsShaderVariant()
{
bool res = true;
for(int i = 0; i < targetMatInfos.Length; i++)
{
res = res && targetMatInfos[i].IsShaderVariant();
}
return res;
}
public bool AreAllMaterialsShaderGeneric()
{
bool res = true;
for (int i = 0; i < targetMatInfos.Length; i++)
{
res = res && !targetMatInfos[i].IsShaderVariant();
}
return res;
}
}
}