Files
2026-02-23 22:01:07 +07:00

168 lines
6.1 KiB
C#

using UnityEditor;
using UnityEngine;
namespace AllIn13DShader
{
public class TextureBlendingEffectDrawer : AbstractEffectDrawer
{
private int mainTexPropertyIndex;
private EffectProperty mainNormalEffectProperty;
private EffectProperty effectPropBlendingSource;
private EffectProperty effectPropTexBlendingMask;
private EffectProperty effectPropBlendingMaskCutoffG;
private EffectProperty effectPropBlendingMaskSmoothnessG;
private EffectProperty effectPropBlendingMaskCutoffB;
private EffectProperty effectPropBlendingMaskSmoothnessB;
private EffectProperty effectPropBlendingMaskCutoffWhite;
private EffectProperty effectPropBlendingMaskSmoothnessWhite;
private EffectProperty effectPropBlendingMode;
private EffectProperty effectPropBlendingTextureG;
private EffectProperty effectPropBlendingTextureB;
private EffectProperty effectPropBlendingTextureWhite;
private EffectProperty effectPropBlendingNormalMapG;
private EffectProperty effectPropBlendingNormalMapB;
private EffectProperty effectPropBlendingNormalMapWhite;
public TextureBlendingEffectDrawer(EffectProperty mainNormalMapEffectProperty, AllIn13DShaderInspectorReferences references,
PropertiesConfig propertiesConfig) : base(references, propertiesConfig)
{
this.drawerID = Constants.TEXTURE_BLENDING_EFFECT_DRAWER_ID;
mainTexPropertyIndex = FindPropertyIndex("_MainTex");
this.mainNormalEffectProperty = mainNormalMapEffectProperty;
this.effectConfig = propertiesConfig.FindEffectConfigByID("TEXTURE_BLENDING");
this.effectPropBlendingSource = effectConfig.FindEffectPropertyByName("_TextureBlendingSource");
this.effectPropTexBlendingMask = effectConfig.FindEffectPropertyByName("_TexBlendingMask");
this.effectPropBlendingMaskCutoffG = effectConfig.FindEffectPropertyByName("_BlendingMaskCutoffG");
this.effectPropBlendingMaskSmoothnessG = effectConfig.FindEffectPropertyByName("_BlendingMaskSmoothnessG");
this.effectPropBlendingMaskCutoffB = effectConfig.FindEffectPropertyByName("_BlendingMaskCutoffB");
this.effectPropBlendingMaskSmoothnessB = effectConfig.FindEffectPropertyByName("_BlendingMaskSmoothnessB");
this.effectPropBlendingMaskCutoffWhite = effectConfig.FindEffectPropertyByName("_BlendingMaskCutoffWhite");
this.effectPropBlendingMaskSmoothnessWhite = effectConfig.FindEffectPropertyByName("_BlendingMaskSmoothnessWhite");
this.effectPropBlendingMode = effectConfig.FindEffectPropertyByName("_TextureBlendingMode");
this.effectPropBlendingTextureG = effectConfig.FindEffectPropertyByName("_BlendingTextureG");
this.effectPropBlendingTextureB = effectConfig.FindEffectPropertyByName("_BlendingTextureB");
this.effectPropBlendingTextureWhite = effectConfig.FindEffectPropertyByName("_BlendingTextureWhite");
this.effectPropBlendingNormalMapG = effectConfig.FindEffectPropertyByName("_BlendingNormalMapG");
this.effectPropBlendingNormalMapB = effectConfig.FindEffectPropertyByName("_BlendingNormalMapB");
this.effectPropBlendingNormalMapWhite = effectConfig.FindEffectPropertyByName("_BlendingNormalMapWhite");
}
protected override void DrawProperties()
{
bool isRGBMode = references.IsKeywordEnabled("_TEXTUREBLENDINGMODE_RGB");
bool isBlendingSourceTexture = references.IsKeywordEnabled("_TEXTUREBLENDINGSOURCE_TEXTURE");
bool isNormalEnabled = references.IsKeywordEnabled("_NORMAL_MAP_ON");
DrawProperty(effectPropBlendingSource);
if(IsEffectPropertyVisible(effectPropTexBlendingMask, references.targetMatInfos))
{
DrawProperty(effectPropTexBlendingMask);
}
DrawProperty(effectPropBlendingMode);
GUILayout.Space(20f);
MaterialProperty matPropertyMainNormalMap = references.matProperties[mainNormalEffectProperty.propertyIndex];
if (isRGBMode)
{
EffectPropertyDrawer.DrawProperty(
materialProperty: references.matProperties[mainTexPropertyIndex],
labelPrefix: string.Empty,
displayName: $"{references.matProperties[mainTexPropertyIndex].displayName} (R)",
customValue: string.Empty,
allowReset: true,
isKeywordProperty: false,
propertyType: EffectProperty.PropertyType.BASIC,
references: references);
if (isNormalEnabled)
{
EffectPropertyDrawer.DrawProperty(
materialProperty: matPropertyMainNormalMap,
labelPrefix: string.Empty,
displayName: $"{matPropertyMainNormalMap.displayName} (R)",
customValue: string.Empty,
allowReset: true,
isKeywordProperty: false,
propertyType: EffectProperty.PropertyType.BASIC,
references: references);
}
GUILayout.Space(20f);
DrawProperty(effectPropBlendingTextureG);
if (isNormalEnabled)
{
DrawProperty(effectPropBlendingNormalMapG);
}
DrawProperty(effectPropBlendingMaskCutoffG);
DrawProperty(effectPropBlendingMaskSmoothnessG);
GUILayout.Space(20f);
DrawProperty(effectPropBlendingTextureB);
if (isNormalEnabled)
{
DrawProperty(effectPropBlendingNormalMapB);
}
DrawProperty(effectPropBlendingMaskCutoffB);
DrawProperty(effectPropBlendingMaskSmoothnessB);
GUILayout.Space(20f);
}
else
{
EffectPropertyDrawer.DrawProperty(
materialProperty: references.matProperties[mainTexPropertyIndex],
labelPrefix: string.Empty,
displayName: $"{references.matProperties[mainTexPropertyIndex].displayName} (Black)",
customValue: string.Empty,
allowReset: true,
isKeywordProperty: false,
propertyType: EffectProperty.PropertyType.BASIC,
references: references);
if (isNormalEnabled)
{
EffectPropertyDrawer.DrawProperty(
materialProperty: matPropertyMainNormalMap,
labelPrefix: string.Empty,
displayName: $"{matPropertyMainNormalMap.displayName} (R)",
customValue: string.Empty,
allowReset: true,
isKeywordProperty: false,
propertyType: EffectProperty.PropertyType.BASIC,
references: references);
}
DrawProperty(effectPropBlendingTextureWhite);
if (isNormalEnabled)
{
DrawProperty(effectPropBlendingNormalMapWhite);
}
if (isBlendingSourceTexture)
{
DrawProperty(effectPropBlendingMaskCutoffWhite);
DrawProperty(effectPropBlendingMaskSmoothnessWhite);
}
}
}
}
}