using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEngine.Rendering; #if VEGETATION_STUDIO_PRO using AwesomeTechnologies.VegetationSystem; #endif [CustomEditor(typeof(SplineProfile)), CanEditMultipleObjects] public class SplineProfileEditor : Editor { public override void OnInspectorGUI() { SplineProfile spline = (SplineProfile)target; GUILayout.Label("Basic: ", EditorStyles.boldLabel); EditorGUI.indentLevel++; spline.splineMaterial = (Material)EditorGUILayout.ObjectField("Material", spline.splineMaterial, typeof(Material), false); spline.meshCurve = EditorGUILayout.CurveField("Mesh curve", spline.meshCurve); EditorGUILayout.LabelField("Vertice distribution: " + spline.minVal.ToString() + " " + spline.maxVal.ToString()); EditorGUILayout.MinMaxSlider(ref spline.minVal, ref spline.maxVal, 0, 1); spline.minVal = (int)(spline.minVal * 100) * 0.01f; spline.maxVal = (int)(spline.maxVal * 100) * 0.01f; if (spline.minVal > 0.5f) spline.minVal = 0.5f; if (spline.minVal < 0.01f) spline.minVal = 0.01f; if (spline.maxVal < 0.5f) spline.maxVal = 0.5f; if (spline.maxVal > 0.99f) spline.maxVal = 0.99f; spline.traingleDensity = 1 / (float)EditorGUILayout.IntSlider("U", (int)(1 / (float)spline.traingleDensity), 1, 100); spline.vertsInShape = EditorGUILayout.IntSlider("V", spline.vertsInShape - 1, 1, 20) + 1; spline.uvScale = EditorGUILayout.FloatField("UV scale (texture tiling)", spline.uvScale); spline.uvRotation = EditorGUILayout.Toggle("Rotate UV", spline.uvRotation); EditorGUI.indentLevel--; GUILayout.Label("Flow Map Automatic: ", EditorStyles.boldLabel); EditorGUI.indentLevel++; spline.flowFlat = EditorGUILayout.CurveField("Flow curve flat speed", spline.flowFlat); spline.flowWaterfall = EditorGUILayout.CurveField("Flow curve waterfall speed", spline.flowWaterfall); spline.noiseflowMap = EditorGUILayout.Toggle("Add noise", spline.noiseflowMap); if (spline.noiseflowMap) { EditorGUI.indentLevel++; spline.noiseMultiplierflowMap = EditorGUILayout.FloatField("Noise multiplier inside", spline.noiseMultiplierflowMap); spline.noiseSizeXflowMap = EditorGUILayout.FloatField("Noise scale X", spline.noiseSizeXflowMap); spline.noiseSizeZflowMap = EditorGUILayout.FloatField("Noise scale Z", spline.noiseSizeZflowMap); EditorGUI.indentLevel--; } EditorGUI.indentLevel--; GUILayout.Label("Flow Map Physic: ", EditorStyles.boldLabel); EditorGUI.indentLevel++; spline.floatSpeed = EditorGUILayout.FloatField("River float speed", spline.floatSpeed); EditorGUI.indentLevel--; GUILayout.Label("Terrain carve:", EditorStyles.boldLabel); EditorGUI.indentLevel++; spline.terrainCarve = EditorGUILayout.CurveField("Terrain carve", spline.terrainCarve); spline.terrainSmoothMultiplier = EditorGUILayout.Slider("Smooth", spline.terrainSmoothMultiplier, 0, 20); spline.distSmooth = EditorGUILayout.FloatField("Smooth distance", spline.distSmooth); spline.noiseCarve = EditorGUILayout.Toggle("Add noise", spline.noiseCarve); EditorGUILayout.Space(); if (spline.noiseCarve) { EditorGUI.indentLevel++; spline.noiseMultiplierInside = EditorGUILayout.FloatField("Noise Multiplier Inside", spline.noiseMultiplierInside); spline.noiseMultiplierOutside = EditorGUILayout.FloatField("Noise Multiplier Outside", spline.noiseMultiplierOutside); spline.noiseSizeX = EditorGUILayout.FloatField("Noise scale X", spline.noiseSizeX); spline.noiseSizeZ = EditorGUILayout.FloatField("Noise scale Z", spline.noiseSizeZ); EditorGUI.indentLevel--; } //spline.distSmoothStart = EditorGUILayout.FloatField("Smooth start distance", spline.distSmoothStart); EditorGUI.indentLevel--; GUILayout.Label("Terrain paint:", EditorStyles.boldLabel); EditorGUI.indentLevel++; EditorGUI.BeginChangeCheck(); spline.terrainPaintCarve = EditorGUILayout.CurveField("Terrain paint", spline.terrainPaintCarve); Terrain terrain = Terrain.activeTerrain; if (terrain != null) { int splatNumber = terrain.terrainData.terrainLayers.Length; string[] options = new string[splatNumber]; for (int i = 0; i < splatNumber; i++) { options[i] = i + " - "; if (terrain.terrainData.terrainLayers[i].diffuseTexture != null) { options[i] += terrain.terrainData.terrainLayers[i].diffuseTexture.name; } } EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Splat id:"); spline.currentSplatMap = EditorGUILayout.Popup(spline.currentSplatMap, options); EditorGUILayout.EndHorizontal(); spline.noisePaint = EditorGUILayout.Toggle("Add noise", spline.noisePaint); if (spline.noisePaint) { EditorGUI.indentLevel++; spline.noiseMultiplierInsidePaint = EditorGUILayout.FloatField("Noise Multiplier Inside", spline.noiseMultiplierInsidePaint); spline.noiseMultiplierOutsidePaint = EditorGUILayout.FloatField("Noise Multiplier Outside", spline.noiseMultiplierOutsidePaint); spline.noiseSizeXPaint = EditorGUILayout.FloatField("Noise scale X", spline.noiseSizeXPaint); spline.noiseSizeZPaint = EditorGUILayout.FloatField("Noise scale Z", spline.noiseSizeZPaint); EditorGUI.indentLevel--; } spline.mixTwoSplatMaps = EditorGUILayout.Toggle("Mix two splat maps", spline.mixTwoSplatMaps); if (spline.mixTwoSplatMaps) { EditorGUI.indentLevel++; EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Second splat id:"); spline.secondSplatMap = EditorGUILayout.Popup(spline.secondSplatMap, options); EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel--; } spline.addCliffSplatMap = EditorGUILayout.Toggle("Add cliff splatmap", spline.addCliffSplatMap); if (spline.addCliffSplatMap) { EditorGUI.indentLevel++; EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Cliff splat id:"); spline.cliffSplatMap = EditorGUILayout.Popup(spline.cliffSplatMap, options); EditorGUILayout.EndHorizontal(); spline.cliffAngle = EditorGUILayout.FloatField("Cliff angle", spline.cliffAngle); spline.cliffBlend = EditorGUILayout.FloatField("Cliff blend", spline.cliffBlend); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Cliff oustide splat id:"); spline.cliffSplatMapOutside = EditorGUILayout.Popup(spline.cliffSplatMapOutside, options); EditorGUILayout.EndHorizontal(); spline.cliffAngleOutside = EditorGUILayout.FloatField("Cliff oustide angle", spline.cliffAngleOutside); spline.cliffBlendOutside = EditorGUILayout.FloatField("Cliff oustide blend", spline.cliffBlendOutside); EditorGUI.indentLevel--; } EditorGUI.indentLevel--; } GUILayout.Label("Terrain clear foliage:", EditorStyles.boldLabel); EditorGUI.indentLevel++; spline.distanceClearFoliage = EditorGUILayout.FloatField("Remove Details Distance", spline.distanceClearFoliage); spline.distanceClearFoliageTrees = EditorGUILayout.FloatField("Remove Trees Distance", spline.distanceClearFoliageTrees); EditorGUI.indentLevel--; GUILayout.Label("River simulation:", EditorStyles.boldLabel); EditorGUI.indentLevel++; spline.simulatedRiverLength = EditorGUILayout.FloatField("Simulation length", spline.simulatedRiverLength); if (spline.simulatedRiverLength < 1) spline.simulatedRiverLength = 1; spline.simulatedRiverPoints = EditorGUILayout.IntSlider("Simulation points interval", spline.simulatedRiverPoints, 1, 100); spline.simulatedMinStepSize = EditorGUILayout.Slider("Simulation sampling interval", spline.simulatedMinStepSize, 0.5f, 5); spline.simulatedNoUp = EditorGUILayout.Toggle("Simulation block uphill", spline.simulatedNoUp); spline.simulatedBreakOnUp = EditorGUILayout.Toggle("Simulation break on uphill", spline.simulatedBreakOnUp); spline.noiseWidth = EditorGUILayout.Toggle("Add width noise", spline.noiseWidth); if (spline.noiseWidth) { EditorGUI.indentLevel++; spline.noiseMultiplierWidth = EditorGUILayout.FloatField("Noise Multiplier Width", spline.noiseMultiplierWidth); spline.noiseSizeWidth = EditorGUILayout.FloatField("Noise Scale Width", spline.noiseSizeWidth); EditorGUI.indentLevel--; } EditorGUI.indentLevel--; GUILayout.Label("Lightning settings:", EditorStyles.boldLabel); EditorGUI.indentLevel++; spline.receiveShadows = EditorGUILayout.Toggle("Receive Shadows", spline.receiveShadows); spline.shadowCastingMode = (ShadowCastingMode)EditorGUILayout.EnumPopup("Shadow Casting Mode", spline.shadowCastingMode); EditorGUI.indentLevel--; EditorGUILayout.Space(); EditorUtility.SetDirty(target); #if VEGETATION_STUDIO_PRO GUILayout.Label("Vegetation stuio pro:", EditorStyles.boldLabel); spline.biomeType = System.Convert.ToInt32(EditorGUILayout.EnumPopup("Select biome", (BiomeType)spline.biomeType)); #else GUILayout.Label("Vegetation studio pro:", EditorStyles.boldLabel); spline.biomeType = EditorGUILayout.IntField("Select biome", spline.biomeType); #endif } }