194 lines
4.4 KiB
C#
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;
|
|
}
|
|
}
|
|
} |