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

151 lines
3.3 KiB
C#

using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.Rendering;
namespace AllIn13DShader
{
[System.Serializable]
public class EffectProperty
{
public enum PropertyType
{
BASIC = 0,
ENUM = 1,
TOGGLE = 2
}
[SerializeReference] public AllIn13DEffectConfig parentEffect;
public int propertyIndex;
public string propertyName;
public string displayName;
public List<string> keywords;
public List<string> incompatibleKeywords;
public string[] propertyKeywords;
public string[] fullKeywordNames;
public KeywordsOp keywordsOp;
public bool allowReset;
public ShaderPropertyType shaderPropertyType;
public bool isHDR;
public bool hasTilingAndOffset;
public EffectProperty(AllIn13DEffectConfig parentEffect, int propertyIndex, string propertyName, string displayName,
KeywordsOp keywordsOp, bool allowReset, ShaderPropertyType shaderPropertyType, ShaderPropertyFlags shaderPropertyFlags)
{
this.parentEffect = parentEffect;
this.keywords = new List<string>();
this.incompatibleKeywords = new List<string>();
this.propertyKeywords = new string[0];
this.fullKeywordNames = new string[0];
this.propertyIndex = propertyIndex;
this.propertyName = propertyName;
this.displayName = displayName;
this.keywordsOp = keywordsOp;
this.allowReset = allowReset;
this.shaderPropertyType = shaderPropertyType;
this.isHDR = shaderPropertyFlags.HasFlag(ShaderPropertyFlags.HDR);
this.hasTilingAndOffset = !shaderPropertyFlags.HasFlag(ShaderPropertyFlags.NoScaleOffset) && shaderPropertyType == ShaderPropertyType.Texture;
}
public void AddKeyword(string keyword)
{
this.keywords.Add(keyword);
}
public void AddIncompatibleKeyword(string keyword)
{
this.incompatibleKeywords.Add(keyword);
}
public void AddPropertyKeywords(List<string> propertyKeywordsToAdd)
{
bool isEnum = propertyKeywordsToAdd.Count > 1;
for (int i = 0; i < propertyKeywordsToAdd.Count; i++)
{
string fullKeywordName;
if (isEnum)
{
fullKeywordName = this.propertyName.ToUpperInvariant() + "_" + propertyKeywordsToAdd[i].ToUpperInvariant();
}
else
{
fullKeywordName = propertyKeywordsToAdd[i];
}
ArrayUtility.Add(ref this.propertyKeywords, propertyKeywordsToAdd[i]);
ArrayUtility.Add(ref this.fullKeywordNames, fullKeywordName);
}
}
public bool IsPropertyWithKeywords()
{
bool res = propertyKeywords.Length > 0;
return res;
}
public bool IsToggleProperty()
{
bool res = propertyKeywords.Length == 1;
return res;
}
public bool IsEnumProperty()
{
bool res = propertyKeywords.Length >= 2;
return res;
}
public PropertyType GetPropertyType()
{
PropertyType res = PropertyType.BASIC;
if (IsEnumProperty())
{
res = PropertyType.ENUM;
}
else if (IsToggleProperty())
{
res = PropertyType.TOGGLE;
}
return res;
}
public int GetEnabledKeywordIndex(string[] enabledKeywords)
{
int res = -1;
if (IsEnumProperty() || IsToggleProperty())
{
for (int i = 0; i < enabledKeywords.Length; i++)
{
for (int j = 0; j < fullKeywordNames.Length; j++)
{
if (fullKeywordNames[j] == enabledKeywords[i])
{
res = j;
break;
}
}
if (res >= 0)
{
break;
}
}
}
return res;
}
}
}