using Misaki.ShaderGUI; using System.Linq; using UnityEditor; using UnityEngine; using static Misaki.HdrpToon.UTSPropertyName.Stocking; namespace Misaki.HdrpToon.Editor { internal class StockingScope : MaterialUIScope { private static class Properties { public static MaterialProperty stockingFresnelWidth; public static MaterialProperty stockingSparkleSpacing; public static MaterialProperty stockingSparkleAmount; public static MaterialProperty stockingSparkleSize; public static MaterialProperty stockingSparkleIntensity; } private static class Styles { public static readonly GUIContent stockingFresnelWidthText = new("Fresnel Width", "Set the width of the fresnel effect for the stocking."); public static readonly GUIContent stockingSparkleSpacingText = new("Sparkle Spacing", "Set the spacing between sparkles on the stocking."); public static readonly GUIContent stockingSparkleAmountText = new("Sparkle Amount", "Set the amount of sparkles on the stocking."); public static readonly GUIContent stockingSparkleSizeText = new("Sparkle Size", "Set the size of the sparkles on the stocking."); public static readonly GUIContent stockingSparkleIntensityText = new("Sparkle Intensity", "Set the intensity of the sparkle effect for the stocking."); } protected override ShaderGUIExpandable ExpandableBit => ShaderGUIExpandable.Stocking; protected override GUIContent Header => EditorGUIUtility.TrTextContent("Stocking Settings"); protected override bool ShowSection => materials.All(mat => mat.HasFeature(SurfaceFeature.Stocking)); protected override void LoadMaterialProperties() { Properties.stockingFresnelWidth = FindProperty(STOCKING_FRESNEL_WIDTH); Properties.stockingSparkleSpacing = FindProperty(STOCKING_SPARKLE_SPACING); Properties.stockingSparkleAmount = FindProperty(STOCKING_SPARKLE_AMOUNT); Properties.stockingSparkleSize = FindProperty(STOCKING_SPARKLE_SIZE); Properties.stockingSparkleIntensity = FindProperty(STOCKING_SPARKLE_INTENSITY); } protected override void DrawContent() { editor.ShaderProperty(Properties.stockingFresnelWidth, Styles.stockingFresnelWidthText); editor.ShaderProperty(Properties.stockingSparkleSpacing, Styles.stockingSparkleSpacingText); editor.ShaderProperty(Properties.stockingSparkleAmount, Styles.stockingSparkleAmountText); editor.ShaderProperty(Properties.stockingSparkleSize, Styles.stockingSparkleSizeText); editor.ShaderProperty(Properties.stockingSparkleIntensity, Styles.stockingSparkleIntensityText); } } }