[Add] All in one shader
This commit is contained in:
@@ -0,0 +1,194 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user