Files
2024-11-20 15:21:28 +01:00

207 lines
10 KiB
C#

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
}
}