100 lines
2.0 KiB
C#
100 lines
2.0 KiB
C#
using UnityEngine;
|
|
|
|
namespace AllIn13DShader
|
|
{
|
|
public abstract class AbstractMaterialInfo
|
|
{
|
|
public string[] enabledKeywords;
|
|
public Material mat;
|
|
|
|
public AbstractMaterialInfo(Material mat)
|
|
{
|
|
this.enabledKeywords = new string[0];
|
|
this.mat = mat;
|
|
}
|
|
|
|
public abstract void RefreshKeywords();
|
|
|
|
public abstract void EnableKeyword(string keyword);
|
|
|
|
public abstract void DisableKeyword(string keyword);
|
|
|
|
public abstract bool IsShaderVariant();
|
|
|
|
public bool IsKeywordEnabled(string keyword)
|
|
{
|
|
bool res = false;
|
|
|
|
for (int i = 0; i < enabledKeywords.Length; i++)
|
|
{
|
|
if (enabledKeywords[i] == keyword)
|
|
{
|
|
res = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
public int GetEnabledKeywordIndexByEffect(AllIn13DEffectConfig effectConfig)
|
|
{
|
|
int res = -1;
|
|
for (int i = 0; i < enabledKeywords.Length; i++)
|
|
{
|
|
res = effectConfig.GetKeywordIndex(enabledKeywords[i]);
|
|
if(res >= 0)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
public int GetEnabledKeywordIndexByEffectProperty(EffectProperty effectProperty)
|
|
{
|
|
int res = -1;
|
|
|
|
if(effectProperty.IsEnumProperty() || effectProperty.IsToggleProperty())
|
|
{
|
|
for (int i = 0; i < enabledKeywords.Length; i++)
|
|
{
|
|
for (int j = 0; j < effectProperty.fullKeywordNames.Length; j++)
|
|
{
|
|
if (effectProperty.fullKeywordNames[j] == enabledKeywords[i])
|
|
{
|
|
res = j;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(res >= 0)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
public static AbstractMaterialInfo CreateInstance(Material mat)
|
|
{
|
|
EffectsProfileCollection effectsProfileCollection = GlobalConfiguration.instance.effectsProfileCollection;
|
|
EffectsProfile effectsProfile = effectsProfileCollection.FindEffectProfileByShader(mat.shader);
|
|
|
|
AbstractMaterialInfo res = null;
|
|
if (effectsProfile == null)
|
|
{
|
|
res = new CommonMaterialInfo(mat);
|
|
}
|
|
else
|
|
{
|
|
res = new EffectProfileMaterialInfo(effectsProfile, mat);
|
|
}
|
|
|
|
return res;
|
|
}
|
|
}
|
|
} |