194 lines
4.8 KiB
C#
194 lines
4.8 KiB
C#
using UnityEditor;
|
|
using UnityEngine;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine.Rendering;
|
|
using Object = UnityEngine.Object;
|
|
using System.Linq;
|
|
|
|
// Parts of this file are based on https://github.com/Microsoft/MixedRealityToolkit-Unity/
|
|
// licensed under the MIT license.
|
|
|
|
namespace SilentCelShading.Unity
|
|
{
|
|
public class InspectorCommon
|
|
{
|
|
public enum OutlineMode
|
|
{
|
|
None,
|
|
Tinted,
|
|
Colored
|
|
}
|
|
|
|
public enum AlbedoAlphaMode
|
|
{
|
|
Transparency,
|
|
Smoothness,
|
|
ClippingMask
|
|
}
|
|
|
|
public enum SpecularType
|
|
{
|
|
Disable,
|
|
Standard,
|
|
Cloth,
|
|
Anisotropic,
|
|
Cel,
|
|
CelStrand
|
|
}
|
|
|
|
public enum LightingCalculationType
|
|
{
|
|
Unbiased = 0,
|
|
Standard = 1,
|
|
Cubed = 2,
|
|
Directional = 3,
|
|
Biased = 4
|
|
}
|
|
|
|
public enum AmbientFresnelType
|
|
{
|
|
Disable,
|
|
Lit,
|
|
Ambient,
|
|
AmbientAlt
|
|
}
|
|
|
|
public enum MatcapBlendModes
|
|
{
|
|
Additive,
|
|
Multiply,
|
|
Median,
|
|
}
|
|
|
|
public enum MatcapType
|
|
{
|
|
Disable,
|
|
Standard,
|
|
Anisotropic
|
|
}
|
|
|
|
public enum VertexColorType
|
|
{
|
|
Color = 0,
|
|
OutlineColor = 1,
|
|
AdditionalData = 2,
|
|
Ignore = 3
|
|
}
|
|
|
|
public static class CommonStyles
|
|
{
|
|
public static string albedoMapAlphaSmoothnessName = "_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A";
|
|
public static readonly string[] albedoAlphaModeNames = Enum.GetNames(typeof(AlbedoAlphaMode));
|
|
}
|
|
|
|
public class SCSSBoot : AssetPostprocessor {
|
|
private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets,
|
|
string[] movedFromAssetPaths) {
|
|
var isUpdated = importedAssets.Any(path => path.StartsWith("Assets/")) &&
|
|
importedAssets.Any(path => path.Contains("SCSS_InspectorData"));
|
|
|
|
if (isUpdated) {
|
|
InitializeOnLoad();
|
|
}
|
|
}
|
|
|
|
[InitializeOnLoadMethod]
|
|
private static void InitializeOnLoad() {
|
|
InspectorCommon.LoadInspectorData();
|
|
}
|
|
}
|
|
|
|
static private TextAsset inspectorData;
|
|
public static Dictionary<string, GUIContent> styles = new Dictionary<string, GUIContent>();
|
|
|
|
public static void LoadInspectorData()
|
|
{
|
|
char[] recordSep = new char[] {'\n'};
|
|
char[] fieldSep = new char[] {'\t'};
|
|
//if (styles.Count == 0)
|
|
{
|
|
string[] guids = AssetDatabase.FindAssets("t:TextAsset SCSS_InspectorData." + Application.systemLanguage);
|
|
if (guids.Length == 0)
|
|
{
|
|
guids = AssetDatabase.FindAssets("t:TextAsset SCSS_InspectorData.English");
|
|
}
|
|
inspectorData = (TextAsset)AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guids[0]), typeof(TextAsset));
|
|
|
|
string[] records = inspectorData.text.Split(recordSep, System.StringSplitOptions.RemoveEmptyEntries);
|
|
foreach (string record in records)
|
|
{
|
|
string[] fields = record.Split(fieldSep, 3, System.StringSplitOptions.None);
|
|
if (fields.Length != 3) {Debug.LogWarning("Field " + fields[0] + " only has " + fields.Length + " fields!");};
|
|
if (fields[0] != null) styles[fields[0]] = new GUIContent(fields[1], fields[2]);
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void WithGroupVertical(Action action)
|
|
{
|
|
EditorGUILayout.BeginVertical();
|
|
action();
|
|
EditorGUILayout.EndVertical();
|
|
}
|
|
|
|
// Warning: Do not use BeginHorizontal with ShaderProperty because it causes issues with the layout.
|
|
public static void WithGroupHorizontal(Action action)
|
|
{
|
|
EditorGUILayout.BeginHorizontal();
|
|
action();
|
|
EditorGUILayout.EndHorizontal();
|
|
}
|
|
|
|
public static bool WithChangeCheck(Action action)
|
|
{
|
|
EditorGUI.BeginChangeCheck();
|
|
action();
|
|
return EditorGUI.EndChangeCheck();
|
|
}
|
|
|
|
public static void WithGUIDisable(bool disable, Action action)
|
|
{
|
|
bool prevState = GUI.enabled;
|
|
GUI.enabled = disable;
|
|
action();
|
|
GUI.enabled = prevState;
|
|
}
|
|
|
|
public static Material[] WithMaterialPropertyDropdown(MaterialProperty prop, string[] options, MaterialEditor editor)
|
|
{
|
|
int selection = (int)prop.floatValue;
|
|
EditorGUI.BeginChangeCheck();
|
|
selection = EditorGUILayout.Popup(prop.displayName, (int)selection, options);
|
|
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
editor.RegisterPropertyChangeUndo(prop.displayName);
|
|
prop.floatValue = (float)selection;
|
|
return Array.ConvertAll(prop.targets, target => (Material)target);
|
|
}
|
|
|
|
return new Material[0];
|
|
|
|
}
|
|
|
|
public static Material[] WithMaterialPropertyDropdownNoLabel(MaterialProperty prop, string[] options, MaterialEditor editor)
|
|
{
|
|
int selection = (int)prop.floatValue;
|
|
EditorGUI.BeginChangeCheck();
|
|
selection = EditorGUILayout.Popup((int)selection, options);
|
|
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
editor.RegisterPropertyChangeUndo(prop.displayName);
|
|
prop.floatValue = (float)selection;
|
|
return Array.ConvertAll(prop.targets, target => (Material)target);
|
|
}
|
|
|
|
return new Material[0];
|
|
|
|
}
|
|
}
|
|
} |