Files
SoulliesOfficial d94241f36c 场景设计
2026-01-12 03:22:16 -05:00

175 lines
4.9 KiB
C#

using System;
using UnityEditor;
using UnityEngine;
namespace AllIn13DShader
{
public class PropertySelectorAuxWindow : EditorWindow
{
public enum SelectionType
{
GLOBAL_PROPERTY,
ADVANCED_PROPERTY,
EFFECT_GROUP,
}
public enum TypeOfPropertyAdded
{
GLOBAL_PROPERTY,
ADVANCED_PROPERTY,
EFFECT_PROPERTY,
EFFECT_MAIN,
}
private PropertiesConfigCollection propertiesConfigCollection;
//private Shader allIn13DShader;
private Shader allIn13DShaderOutline;
//private PropertiesConfig propertiesConfigNormal;
private PropertiesConfig propertiesConfigOutline;
private int effectGroupIdx;
private int effectIdx;
private int globalPropertyIdx;
private int advancedPropertyIdx;
private EffectGroup selectedEffectGroup;
private AllIn13DEffectConfig selectedEffectConfig;
private EffectProperty selectedEffectProperty;
private TypeOfPropertyAdded typeOfPropertyAdded;
private SelectionType selectionType;
private Action<AllIn13DEffectConfig, int, Shader, TypeOfPropertyAdded> propertyOverrideAddedCallback;
private void OnEnable()
{
//this.allIn13DShader = Shader.Find(Constants.SHADER_FULL_NAME_ALLIN13D);
this.allIn13DShaderOutline = Shader.Find(Constants.SHADER_FULL_NAME_ALLIN13D_OUTLINE);
this.effectIdx = 0;
this.globalPropertyIdx = 0;
this.advancedPropertyIdx = 0;
propertiesConfigCollection = EditorUtils.FindAsset<PropertiesConfigCollection>("PropertiesConfigCollection");
propertiesConfigOutline = propertiesConfigCollection.FindPropertiesConfigByShader(allIn13DShaderOutline);
}
public void Setup(Action<AllIn13DEffectConfig, int, Shader, TypeOfPropertyAdded> propertyOverrideAddedCallback)
{
this.propertyOverrideAddedCallback = propertyOverrideAddedCallback;
}
private void OnGUI()
{
DrawEffectGroupSelector();
if(selectionType == SelectionType.EFFECT_GROUP)
{
DrawEffectSelector();
}
else if(selectionType == SelectionType.GLOBAL_PROPERTY)
{
DrawGlobalPropertySelector();
}
else if(selectionType == SelectionType.ADVANCED_PROPERTY)
{
DrawAdvancedPropertySelector();
}
GUILayout.Space(20f);
if (GUILayout.Button("Add"))
{
AddProperty();
}
}
private void DrawEffectGroupSelector()
{
string[] effectsGroupsNames = propertiesConfigOutline.GetEffectGroupsDisplayNames();
ArrayUtility.Insert(ref effectsGroupsNames, 0, "Advanced Properties");
ArrayUtility.Insert(ref effectsGroupsNames, 0, "Global Properties");
effectGroupIdx = EditorGUILayout.Popup("Group", effectGroupIdx, effectsGroupsNames);
if(effectGroupIdx == 0)
{
selectionType = SelectionType.GLOBAL_PROPERTY;
this.selectedEffectGroup = null;
}
else if(effectGroupIdx == 1)
{
selectionType = SelectionType.ADVANCED_PROPERTY;
this.selectedEffectGroup = null;
}
else
{
selectionType = SelectionType.EFFECT_GROUP;
this.selectedEffectGroup = propertiesConfigOutline.effectsGroups[effectGroupIdx - 2];
}
}
private void DrawEffectSelector()
{
string[] effectsNames = selectedEffectGroup.GetEffectsNames();
effectIdx = EditorGUILayout.Popup("Effect", effectIdx, effectsNames);
selectedEffectConfig = selectedEffectGroup.effects[effectIdx];
}
private void DrawGlobalPropertySelector()
{
string[] globalPropertyNames = propertiesConfigOutline.GetGlobalPropertyNames();
globalPropertyIdx = EditorGUILayout.Popup("Property", globalPropertyIdx, globalPropertyNames);
}
private void DrawAdvancedPropertySelector()
{
string[] globalPropertyNames = propertiesConfigOutline.GetAdvancedPropertyNames();
advancedPropertyIdx = EditorGUILayout.Popup("Property", advancedPropertyIdx, globalPropertyNames);
}
private void AddProperty()
{
if(selectionType == SelectionType.GLOBAL_PROPERTY)
{
typeOfPropertyAdded = TypeOfPropertyAdded.GLOBAL_PROPERTY;
}
else if(selectionType == SelectionType.ADVANCED_PROPERTY)
{
typeOfPropertyAdded = TypeOfPropertyAdded.ADVANCED_PROPERTY;
}
else
{
if(selectedEffectProperty == null)
{
typeOfPropertyAdded = TypeOfPropertyAdded.EFFECT_MAIN;
}
else
{
typeOfPropertyAdded = TypeOfPropertyAdded.EFFECT_PROPERTY;
}
}
if (propertyOverrideAddedCallback != null)
{
switch (typeOfPropertyAdded)
{
case TypeOfPropertyAdded.GLOBAL_PROPERTY:
propertyOverrideAddedCallback(selectedEffectConfig, propertiesConfigOutline.singleProperties[globalPropertyIdx], allIn13DShaderOutline, typeOfPropertyAdded);
break;
case TypeOfPropertyAdded.ADVANCED_PROPERTY:
propertyOverrideAddedCallback(selectedEffectConfig, propertiesConfigOutline.advancedProperties[advancedPropertyIdx + 1], allIn13DShaderOutline, typeOfPropertyAdded);
break;
case TypeOfPropertyAdded.EFFECT_MAIN:
propertyOverrideAddedCallback(selectedEffectConfig, -1, allIn13DShaderOutline, typeOfPropertyAdded);
break;
}
}
Close();
}
}
}