57 lines
2.2 KiB
C#
57 lines
2.2 KiB
C#
using UnityEngine;
|
|
using UnityEditor;
|
|
using System.Collections.Generic;
|
|
|
|
namespace ShinySSRR {
|
|
|
|
[CustomPropertyDrawer(typeof(SubMeshSettingsData))]
|
|
public class SubMeshSettingsDrawer : PropertyDrawer {
|
|
|
|
public override float GetPropertyHeight(SerializedProperty prop, GUIContent label) {
|
|
GUIStyle style = GUI.skin.GetStyle("label");
|
|
float lineHeight = style.CalcHeight(label, EditorGUIUtility.currentViewWidth);
|
|
return lineHeight;
|
|
}
|
|
|
|
|
|
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) {
|
|
Rect firstColumn = position;
|
|
firstColumn.width = EditorGUIUtility.labelWidth - firstColumn.x;
|
|
Rect secondColumn = position;
|
|
secondColumn.x = EditorGUIUtility.labelWidth + 5;
|
|
secondColumn.width = position.width - secondColumn.x;
|
|
int propIndex = GetArrayIndex(prop);
|
|
Reflections refl = (Reflections)prop.serializedObject.targetObject;
|
|
if (refl.ssrRenderers != null && refl.ssrRenderers.Count == 1 && refl.ssrRenderers[0].originalMaterials != null) {
|
|
List<Material> materials = refl.ssrRenderers[0].originalMaterials;
|
|
int matIndex = propIndex;
|
|
if (matIndex >= materials.Count) {
|
|
matIndex = materials.Count - 1;
|
|
}
|
|
EditorGUI.LabelField(firstColumn, materials[matIndex].name);
|
|
} else {
|
|
EditorGUI.LabelField(firstColumn, "SubMesh " + propIndex);
|
|
}
|
|
EditorGUI.PropertyField(secondColumn, prop.FindPropertyRelative("smoothness"), GUIContent.none);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns the index of this property in the array
|
|
/// </summary>
|
|
int GetArrayIndex(SerializedProperty property) {
|
|
string s = property.propertyPath;
|
|
int bracket = s.LastIndexOf("[");
|
|
if (bracket >= 0) {
|
|
string indexStr = s.Substring(bracket + 1, s.Length - bracket - 2);
|
|
int index;
|
|
if (int.TryParse(indexStr, out index)) {
|
|
return index;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
|
|
}
|