You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
4.4 KiB
C#
105 lines
4.4 KiB
C#
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace FluffyGroomingTool {
|
|
[CustomEditor(typeof(HairRenderer))]
|
|
public class HairRendererObjectEditor : Editor {
|
|
private GeneralSettingsUI generalSettingsUI;
|
|
private MotionSettingsUI motionSettingsUI;
|
|
private WindSettingUI windSettingUI;
|
|
|
|
private HairRenderer hairRenderer;
|
|
private Styles styles = new Styles();
|
|
private NormalUI normalUI;
|
|
private CollidersUI collidersUI;
|
|
private StrandShapeUI strandShapeUI;
|
|
|
|
|
|
private void initialize() {
|
|
hairRenderer = serializedObject.targetObject as HairRenderer;
|
|
generalSettingsUI = new GeneralSettingsUI(serializedObject, "Main Settings", "isMainExpanded") {styles = styles};
|
|
motionSettingsUI = new MotionSettingsUI(serializedObject, "Movement", "isMovementExpanded", "settings") {
|
|
styles = styles
|
|
};
|
|
windSettingUI = new WindSettingUI(serializedObject, "Wind", "isWindExpanded", "settings") {styles = styles};
|
|
normalUI = new NormalUI(serializedObject, "Normals", "isNormalExpanded", "settings") {styles = styles};
|
|
strandShapeUI = new StrandShapeUI(serializedObject, "Strands Shape", "isStrandShapeExpanded") {
|
|
styles = styles,
|
|
hairRenderer = hairRenderer
|
|
};
|
|
collidersUI = new CollidersUI(serializedObject, "Colliders", "isColliderExpanded", "settings") {
|
|
styles = styles,
|
|
furRenderer = null,
|
|
hairRenderer = hairRenderer
|
|
};
|
|
EditorUtility.SetSelectedRenderState((serializedObject.targetObject as MonoBehaviour)?.GetComponent<Renderer>(),
|
|
EditorSelectedRenderState.Hidden);
|
|
}
|
|
|
|
public override void OnInspectorGUI() {
|
|
if (generalSettingsUI == null) initialize();
|
|
serializedObject.Update();
|
|
generalSettingsUI.drawUI();
|
|
strandShapeUI.drawUI();
|
|
if (generalSettingsUI.hasNoHairContainer()) {
|
|
serializedObject.ApplyModifiedProperties();
|
|
return;
|
|
}
|
|
|
|
motionSettingsUI.drawUI();
|
|
if (hairRenderer.CurrentRenderer != null) {
|
|
normalUI.hasRenderer = hairRenderer.CurrentRenderer != null;
|
|
normalUI.drawUI();
|
|
}
|
|
|
|
windSettingUI.drawUI();
|
|
collidersUI.drawUI();
|
|
generalSettingsUI.drawMaterialUI();
|
|
serializedObject.ApplyModifiedProperties();
|
|
}
|
|
}
|
|
|
|
class StrandShapeUI : HeaderUI {
|
|
public HairRenderer hairRenderer;
|
|
private Color32 color = new Color32(55, 210, 232, 255);
|
|
|
|
public StrandShapeUI(SerializedObject serializedObject, string header, string headerProperty) : base(
|
|
serializedObject, header, headerProperty) { }
|
|
|
|
public override void drawContent() {
|
|
GUILayout.BeginVertical(styles.PanelStyle);
|
|
EditorGUI.BeginChangeCheck();
|
|
EditorGUILayout.CurveField(new GUIContent("Strand Shape Curve", "The shape curve of each strand from root to tip."),
|
|
hairRenderer.hairContainer.shapeCurve,
|
|
color,
|
|
new Rect(0f, 0f, 1, 1f)
|
|
);
|
|
|
|
EditorGUILayout.LabelField("Strands Width:");
|
|
var lastRect = GUILayoutUtility.GetLastRect();
|
|
lastRect.y += 23;
|
|
lastRect.height = 18;
|
|
hairRenderer.hairContainer.strandsWidth =
|
|
GUI.HorizontalSlider(lastRect, hairRenderer.hairContainer.strandsWidth, 0.00007f, 0.01f);
|
|
|
|
if (EditorGUI.EndChangeCheck()) {
|
|
#if UNITY_EDITOR
|
|
EditorUtility.SetDirty(hairRenderer.hairContainer);
|
|
hairRenderer.rebuildShapeBuffer();
|
|
#endif
|
|
}
|
|
|
|
GUILayout.Space(35);
|
|
var panelSize = MeshCardPropertiesUI.PANEL_SIZE;
|
|
GUILayout.BeginHorizontal(styles.PanelStyle, GUILayout.MaxWidth(panelSize), GUILayout.MinHeight(panelSize));
|
|
EditorGUILayout.Space(panelSize);
|
|
GUILayout.EndHorizontal();
|
|
lastRect = GUILayoutUtility.GetLastRect();
|
|
lastRect.width = MeshCardPropertiesUI.PREVIEW_HEIGHT;
|
|
MeshCardPropertiesUI.drawGrid(hairRenderer.hairContainer.shapeCurve, hairRenderer.hairContainer.pointsPerStrand, lastRect, color);
|
|
|
|
GUILayout.EndVertical();
|
|
GUILayout.Space(PainterResetAndSmoothUI.DEFAULT_MARGIN_TOP);
|
|
}
|
|
}
|
|
} |