void RemoveNullElementFromSplatArray() { int _nullCount = 0; if (splats != null) { for (int i = 0; i < splats.Length; i++) { if (splats[i] == null) { _nullCount++; } } } if (_nullCount > 0) { TerrainPainter_Splat[] _newSplatAray = new TerrainPainter_Splat[splats.Length - _nullCount]; for (int i = 0, indexCounter = 0; i < splats.Length; i++) { if (splats[i] != null) { _newSplatAray[indexCounter] = splats[i]; indexCounter++; } } splats = _newSplatAray; } }
public void MoveDownSplat(int p_index) { if (p_index <= splats.Length - 2) { TerrainPainter_Splat _indexedElement = splats[p_index]; TerrainPainter_Splat _nextElement = splats[p_index + 1]; splats[p_index] = _nextElement; splats[p_index + 1] = _indexedElement; } UpdateSplats(true); }
public void MoveUpSplat(int p_index) { if (p_index >= 1) { TerrainPainter_Splat _indexedElement = splats[p_index]; TerrainPainter_Splat _previusElement = splats[p_index - 1]; splats[p_index - 1] = _indexedElement; splats[p_index] = _previusElement; } UpdateSplats(true); }
public void ChangeSplat(int p_index, TerrainPainter_Splat p_newSplat) { for (int i = 0; i < splats.Length; i++) { if (splats[i] == p_newSplat) { return; } } splats[p_index] = p_newSplat; UpdateSplats(true); }
public void AddNewSplat(TerrainPainter_Splat p_newSplat) { if (p_newSplat.terrainLayer == null) { return; } if (p_newSplat.terrainLayer.diffuseTexture == null) { return; } for (int i = 0; i < splats.Length; i++) { if (splats[i] == p_newSplat) { return; } } if (p_newSplat.useTextureMap) { if (p_newSplat.textureMap == null || (p_newSplat.textureMap && p_newSplat.textureMap.isReadable == false)) { Debug.LogError("Texture Mask must be imported as isReadable. Texture : " + p_newSplat.textureMap); return; } } TerrainPainter_Splat[] _newSplats = new TerrainPainter_Splat[splats.Length + 1]; System.Array.Copy(splats, 0, _newSplats, 0, splats.Length); _newSplats[_newSplats.Length - 1] = p_newSplat; splats = _newSplats; UpdateSplats(true); if (splats.Length == 1) { ClearTerrainMaterialManualPaintedArea(true); } }
public void RemoveSplat(int p_index) { TerrainPainter_Splat[] _newSplats = new TerrainPainter_Splat[splats.Length - 1]; if (_newSplats.Length > 0) { for (int i = 0; i < splats.Length; i++) { if (i < p_index) { _newSplats[i] = splats[i]; } else if (i > p_index) { _newSplats[i - 1] = splats[i]; } } } splats = _newSplats; UpdateSplats(true); }
public override void OnInspectorGUI() { // base.OnInspectorGUI(); if (managerScript.computeShader) { if (managerScript.isUpdating == false) { if (managerScript.isInitialized) { if (GUILayout.Button("Find Terrains")) { managerScript.FindTerrains(); } managerScript.checkForNewTerrainsOnEnable = EditorGUILayout.Toggle("Check For New Terrains OnEnable", managerScript.checkForNewTerrainsOnEnable); managerScript.computeShader = (ComputeShader)EditorGUILayout.ObjectField("ComputeShader", managerScript.computeShader, typeof(ComputeShader)); EditorGUI.BeginChangeCheck(); managerScript.customTerrainMaterial = (Material)EditorGUILayout.ObjectField("Custom Terrain Material", managerScript.customTerrainMaterial, typeof(Material)); if (EditorGUI.EndChangeCheck()) { managerScript.SetUpCustomTerrainMaterail(); } EditorGUILayout.Toggle("Initialized", managerScript.isInitialized); EditorGUILayout.Toggle("Is updating", managerScript.isUpdating); EditorGUILayout.Toggle("Has Terrain Heigtmap Changed", managerScript.hasTerrainHeigtmapChanged); if (managerScript.isInitialized) { EditorGUI.BeginChangeCheck(); managerScript.flowMapIteration = Mathf.Clamp(EditorGUILayout.DelayedIntField("Flow Map Iteration Count", managerScript.flowMapIteration), 0, 30); if (EditorGUI.EndChangeCheck()) { managerScript.UpdateFlowMap(true); } EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); managerScript.blurSplatmap = EditorGUILayout.Toggle("Blur Splatmap", managerScript.blurSplatmap); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); managerScript.autoUpdate = EditorGUILayout.Toggle("Auto Update", managerScript.autoUpdate); EditorGUILayout.Separator(); if (GUILayout.Button("Update Terrains")) { managerScript.UpdateTerrainsAtInitialize(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); managerScript.autoUpdateFlowMap = EditorGUILayout.Toggle("Auto Update Flowmap", managerScript.autoUpdateFlowMap); EditorGUILayout.Separator(); if (managerScript.autoUpdateFlowMap) { EditorGUILayout.LabelField("Continuous update may cause dropping performance!"); } else { if (GUILayout.Button("Update Flowmap")) { managerScript.UpdateFlowMap(true); } } EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); managerScript.lerpingDistance = EditorGUILayout.Slider("Lerping Distance : ", managerScript.lerpingDistance, 1f, 10000f); if (EditorGUI.EndChangeCheck()) { managerScript.UpdateTerrainMaterialParameters(true); } EditorGUI.BeginChangeCheck(); managerScript.transitionAmount = EditorGUILayout.Slider("Transition Amount : ", managerScript.transitionAmount, 0.1f, 0.5f); if (EditorGUI.EndChangeCheck()) { managerScript.UpdateTerrainMaterialParameters(true); } EditorGUI.BeginChangeCheck(); managerScript.triplanarCutoffBias = EditorGUILayout.Slider("Triplanar Cutoff Bias : ", managerScript.triplanarCutoffBias, 0f, 1f); if (EditorGUI.EndChangeCheck()) { managerScript.UpdateTerrainMaterialParameters(true); } EditorGUILayout.Separator(); EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.Separator(); if (GUILayout.Button("Update Splatmap")) { managerScript.UpdateSplatmapMap(true); } EditorGUILayout.Separator(); if (GUILayout.Button("Update Manual Painted Area")) { managerScript.UpdateTerrainMaterialManualPaintedArea(true); } EditorGUILayout.Separator(); if (GUILayout.Button("Write To Terrain Alphamap")) { managerScript.WriteToTerrainAlphamap(true); } EditorGUILayout.Separator(); if (GUILayout.Button("Clear Manual Painted Area")) { managerScript.ClearTerrainMaterialManualPaintedArea(true); } EditorGUILayout.Separator(); EditorGUILayout.LabelField("Terrain count : " + managerScript.terrains.Length); EditorGUILayout.LabelField("Splat count : " + managerScript.splats.Length + " -- Click on image to change parameters."); EditorGUILayout.Separator(); GUIStyle _title_guiStyle = new GUIStyle(); _title_guiStyle.fontStyle = FontStyle.Bold; EditorGUILayout.LabelField("Splats", _title_guiStyle); GUIStyle _label_guiStyle = new GUIStyle(); _label_guiStyle.fixedWidth = 100f; // _label_guiStyle.fontStyle = FontStyle.Bold; GUIStyle _button_guiStyle = new GUIStyle(); _button_guiStyle.fixedWidth = 50f; _button_guiStyle.fixedHeight = 50f; if (managerScript.isUpdating == false) { for (int i = 0; i < managerScript.splats.Length; i++) { EditorGUILayout.BeginHorizontal(); _button_guiStyle.normal.background = managerScript.splats[i].terrainLayer.diffuseTexture; if (GUILayout.Button("", _button_guiStyle)) { if (selected_splat_index == i) { selected_splat_index = -1; } else { selected_splat_index = i; } } EditorGUILayout.Separator(); if (i == selected_splat_index) { _label_guiStyle.normal.textColor = Color.red; } else { _label_guiStyle.normal.textColor = Color.black; } GUILayout.Label(managerScript.splats[i].name, _label_guiStyle); if (GUILayout.Button(" Up ")) { managerScript.MoveUpSplat(i); if (selected_splat_index > -1) { selected_splat_index = Mathf.Clamp(selected_splat_index - 1, 0, managerScript.splats.Length - 1); } } EditorGUILayout.Separator(); if (GUILayout.Button("Down")) { managerScript.MoveDownSplat(i); if (selected_splat_index > -1) { selected_splat_index = Mathf.Clamp(selected_splat_index + 1, 0, managerScript.splats.Length - 1); } } EditorGUILayout.Separator(); if (GUILayout.Button("-")) { managerScript.RemoveSplat(i); selected_splat_index = -1; } else { TerrainPainter_Splat _assignedSplat = (TerrainPainter_Splat)EditorGUILayout.ObjectField(managerScript.splats[i], typeof(TerrainPainter_Splat)); if (_assignedSplat != managerScript.splats[i]) { managerScript.ChangeSplat(i, _assignedSplat); } } EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); } EditorGUILayout.LabelField("To add new splat drop here"); newAddedSplat = (TerrainPainter_Splat)EditorGUILayout.ObjectField(newAddedSplat, typeof(TerrainPainter_Splat)); if (newAddedSplat != null) { managerScript.AddNewSplat(newAddedSplat); newAddedSplat = null; } EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); if (selected_splat_index > -1 && selected_splat_index < managerScript.splats.Length) { EditorGUI.BeginChangeCheck(); EditorGUILayout.LabelField(managerScript.splats[selected_splat_index].name, _title_guiStyle); EditorGUILayout.Separator(); managerScript.splats[selected_splat_index].terrainLayer = (TerrainLayer)EditorGUILayout.ObjectField("Terrain Layer", managerScript.splats[selected_splat_index].terrainLayer, typeof(TerrainLayer)); EditorGUILayout.Separator(); managerScript.splats[selected_splat_index].splatType = (SplatType)EditorGUILayout.EnumPopup("Splat Type", managerScript.splats[selected_splat_index].splatType); managerScript.splats[selected_splat_index].paintMethod = (PaintMethod)EditorGUILayout.EnumPopup("Paint Method", managerScript.splats[selected_splat_index].paintMethod); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (managerScript.splats[selected_splat_index].splatType != SplatType.Base) { if (managerScript.splats[selected_splat_index].useFlowMapMask) { EditorGUILayout.BeginHorizontal(); managerScript.splats[selected_splat_index].useFlowMapMask = EditorGUILayout.Toggle("Use FlowMap Mask", managerScript.splats[selected_splat_index].useFlowMapMask); managerScript.splats[selected_splat_index].flowMapEffect = (MapMaskEffect)EditorGUILayout.EnumPopup("FlowMap Effect", managerScript.splats[selected_splat_index].flowMapEffect); EditorGUILayout.EndHorizontal(); managerScript.splats[selected_splat_index].paintRules.flowMapWeight = EditorGUILayout.Slider("Flow Map Weight", managerScript.splats[selected_splat_index].paintRules.flowMapWeight, 0f, 1f); managerScript.splats[selected_splat_index].paintRules.flowMapTransition = EditorGUILayout.Slider("Flow Map Transition", managerScript.splats[selected_splat_index].paintRules.flowMapTransition, 0f, 1f); managerScript.splats[selected_splat_index].paintRules.flowMapScale = EditorGUILayout.Slider("Flow Map Scale", managerScript.splats[selected_splat_index].paintRules.flowMapScale, 1f, 1000f); EditorGUILayout.Separator(); managerScript.splats[selected_splat_index].paintRules.flowMapHeightWeight = EditorGUILayout.Slider("Flow Map Height Weight", managerScript.splats[selected_splat_index].paintRules.flowMapHeightWeight, 0f, 1f); managerScript.splats[selected_splat_index].isInverseFlowMapHeightWeight = EditorGUILayout.Toggle("Use Inverse Flow Map Height Weight", managerScript.splats[selected_splat_index].isInverseFlowMapHeightWeight); EditorGUILayout.Separator(); managerScript.splats[selected_splat_index].paintRules.flowMapSlopeWeight = EditorGUILayout.Slider("Flow Map Slope Weight", managerScript.splats[selected_splat_index].paintRules.flowMapSlopeWeight, 0f, 1f); managerScript.splats[selected_splat_index].isInverseFlowMapSlopeWeight = EditorGUILayout.Toggle("Use Inverse Flow Map Slope Weight", managerScript.splats[selected_splat_index].isInverseFlowMapSlopeWeight); } else { managerScript.splats[selected_splat_index].useFlowMapMask = EditorGUILayout.Toggle("Use FlowMap Mask", managerScript.splats[selected_splat_index].useFlowMapMask); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (managerScript.splats[selected_splat_index].useConvexityMapMask) { EditorGUILayout.BeginHorizontal(); managerScript.splats[selected_splat_index].useConvexityMapMask = EditorGUILayout.Toggle("Use Convexity Mask", managerScript.splats[selected_splat_index].useConvexityMapMask); managerScript.splats[selected_splat_index].convexityMapEffect = (MapMaskEffect)EditorGUILayout.EnumPopup("Convexity Map Effect", managerScript.splats[selected_splat_index].convexityMapEffect); EditorGUILayout.EndHorizontal(); managerScript.splats[selected_splat_index].paintRules.convexityMapWeight = EditorGUILayout.Slider("Convexity Map Weight", managerScript.splats[selected_splat_index].paintRules.convexityMapWeight, 0.01f, 1f); managerScript.splats[selected_splat_index].paintRules.convexityMapTransition = EditorGUILayout.Slider("Convexity Map Weight Transition", managerScript.splats[selected_splat_index].paintRules.convexityMapTransition, 0.001f, 1f); managerScript.splats[selected_splat_index].paintRules.convexityMapScale = EditorGUILayout.Slider("Convexity Map Scale", managerScript.splats[selected_splat_index].paintRules.convexityMapScale, 1f, 1000f); } else { managerScript.splats[selected_splat_index].useConvexityMapMask = EditorGUILayout.Toggle("Use Convexity Mask", managerScript.splats[selected_splat_index].useConvexityMapMask); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (managerScript.splats[selected_splat_index].useConcavityMapMask) { EditorGUILayout.BeginHorizontal(); managerScript.splats[selected_splat_index].useConcavityMapMask = EditorGUILayout.Toggle("Use Concavity Mask", managerScript.splats[selected_splat_index].useConcavityMapMask); managerScript.splats[selected_splat_index].concavityMapEffect = (MapMaskEffect)EditorGUILayout.EnumPopup("Concavity Map Effect", managerScript.splats[selected_splat_index].concavityMapEffect); EditorGUILayout.EndHorizontal(); managerScript.splats[selected_splat_index].paintRules.concavityMapWeight = EditorGUILayout.Slider("Concavity Map Weight", managerScript.splats[selected_splat_index].paintRules.concavityMapWeight, 0f, 1f); managerScript.splats[selected_splat_index].paintRules.concavityMapTransition = EditorGUILayout.Slider("Concavity Map Weight Transition", managerScript.splats[selected_splat_index].paintRules.concavityMapTransition, 0.001f, 1f); managerScript.splats[selected_splat_index].paintRules.concavityMapScale = EditorGUILayout.Slider("Concavity Map Scale", managerScript.splats[selected_splat_index].paintRules.concavityMapScale, 1f, 1000f); } else { managerScript.splats[selected_splat_index].useConcavityMapMask = EditorGUILayout.Toggle("Use Concavity Mask", managerScript.splats[selected_splat_index].useConcavityMapMask); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (managerScript.splats[selected_splat_index].useAspectMap) { EditorGUILayout.BeginHorizontal(); managerScript.splats[selected_splat_index].useAspectMap = EditorGUILayout.Toggle("Use Aspect Mask", managerScript.splats[selected_splat_index].useAspectMap); managerScript.splats[selected_splat_index].aspectMapEffect = (MapMaskEffect)EditorGUILayout.EnumPopup("Aspect Map Effect", managerScript.splats[selected_splat_index].aspectMapEffect); EditorGUILayout.EndHorizontal(); managerScript.splats[selected_splat_index].paintRules.aspectMapWeight = EditorGUILayout.Slider("Aspect Map Weight", managerScript.splats[selected_splat_index].paintRules.aspectMapWeight, 0f, 1f); managerScript.splats[selected_splat_index].paintRules.aspectMapPower = EditorGUILayout.Slider("Aspect Map Power", managerScript.splats[selected_splat_index].paintRules.aspectMapPower, 1f, 10f); managerScript.splats[selected_splat_index].paintRules.aspectMapDirection = EditorGUILayout.Slider("Aspect Map Direction", managerScript.splats[selected_splat_index].paintRules.aspectMapDirection, 0f, 360f); } else { managerScript.splats[selected_splat_index].useAspectMap = EditorGUILayout.Toggle("Use Aspect Mask", managerScript.splats[selected_splat_index].useAspectMap); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (managerScript.splats[selected_splat_index].useTextureMap) { EditorGUILayout.BeginHorizontal(); managerScript.splats[selected_splat_index].useTextureMap = EditorGUILayout.Toggle("Use Texture Mask", managerScript.splats[selected_splat_index].useTextureMap); managerScript.splats[selected_splat_index].textureMapEffect = (MapMaskEffect)EditorGUILayout.EnumPopup("Texture Map Effect", managerScript.splats[selected_splat_index].textureMapEffect); EditorGUILayout.EndHorizontal(); managerScript.splats[selected_splat_index].paintRules.textureMapWeight = EditorGUILayout.Slider("Texture Map Weight", managerScript.splats[selected_splat_index].paintRules.textureMapWeight, 0f, 1f); EditorGUILayout.BeginHorizontal(); Texture _newTextureMap = (Texture)EditorGUILayout.ObjectField("Texture and Channel", managerScript.splats[selected_splat_index].textureMap, typeof(Texture)); if (_newTextureMap) { if (_newTextureMap.isReadable == false) { Debug.LogError("Texture Mask must be imported as isReadable. Texture : " + managerScript.splats[selected_splat_index].textureMap); } else { managerScript.splats[selected_splat_index].textureMap = _newTextureMap; } } else { managerScript.splats[selected_splat_index].textureMap = null; } managerScript.splats[selected_splat_index].textureMapChannel = (TextureMapChannel)EditorGUILayout.EnumPopup(managerScript.splats[selected_splat_index].textureMapChannel); EditorGUILayout.EndHorizontal(); } else { managerScript.splats[selected_splat_index].useTextureMap = EditorGUILayout.Toggle("Use Texture Mask", managerScript.splats[selected_splat_index].useTextureMap); } EditorGUILayout.Separator(); } EditorGUILayout.Separator(); EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (managerScript.splats[selected_splat_index].splatType == SplatType.Snow) { EditorGUILayout.Separator(); EditorGUILayout.Separator(); managerScript.splats[selected_splat_index].paintRules.snowAmount = EditorGUILayout.Slider("Snow Amount", managerScript.splats[selected_splat_index].paintRules.snowAmount, 0f, 1f); managerScript.splats[selected_splat_index].paintRules.snowTransitionSize = EditorGUILayout.Slider("Snow Transition Size", managerScript.splats[selected_splat_index].paintRules.snowTransitionSize, 0f, 0.1f); managerScript.splats[selected_splat_index].paintRules.snowTransitionFrequency = EditorGUILayout.Slider("Snow Transition Ferquency", managerScript.splats[selected_splat_index].paintRules.snowTransitionFrequency, 0f, 5f); managerScript.splats[selected_splat_index].paintRules.snowTransitionCutoff = EditorGUILayout.Slider("Snow Transition Cutoff", managerScript.splats[selected_splat_index].paintRules.snowTransitionCutoff, 0f, 1f); } else if (managerScript.splats[selected_splat_index].splatType == SplatType.Default) { EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Height : Min Start -- Min End -- Max Start -- Max End"); EditorGUILayout.BeginHorizontal(); managerScript.splats[selected_splat_index].paintRules.heightMinStart = Mathf.Clamp(EditorGUILayout.DelayedFloatField(managerScript.splats[selected_splat_index].paintRules.heightMinStart), 0f, managerScript.splats[selected_splat_index].paintRules.heightMinEnd); managerScript.splats[selected_splat_index].paintRules.heightMinEnd = Mathf.Clamp(EditorGUILayout.DelayedFloatField(managerScript.splats[selected_splat_index].paintRules.heightMinEnd), 0f, managerScript.maxTerrainHeight); managerScript.splats[selected_splat_index].paintRules.heightMaxStart = Mathf.Clamp(EditorGUILayout.DelayedFloatField(managerScript.splats[selected_splat_index].paintRules.heightMaxStart), 0f, managerScript.maxTerrainHeight); managerScript.splats[selected_splat_index].paintRules.heightMaxEnd = Mathf.Clamp(EditorGUILayout.DelayedFloatField(managerScript.splats[selected_splat_index].paintRules.heightMaxEnd), managerScript.splats[selected_splat_index].paintRules.heightMaxStart, managerScript.maxTerrainHeight); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.MinMaxSlider(ref managerScript.splats[selected_splat_index].paintRules.heightMinEnd, ref managerScript.splats[selected_splat_index].paintRules.heightMaxStart, 0f, managerScript.maxTerrainHeight); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.MinMaxSlider(ref managerScript.splats[selected_splat_index].paintRules.heightMinStart, ref managerScript.splats[selected_splat_index].paintRules.heightMaxEnd, 0f, managerScript.maxTerrainHeight); managerScript.splats[selected_splat_index].paintRules.heightMinStart = Mathf.Clamp(managerScript.splats[selected_splat_index].paintRules.heightMinStart, 0f, managerScript.splats[selected_splat_index].paintRules.heightMinEnd); managerScript.splats[selected_splat_index].paintRules.heightMaxEnd = Mathf.Clamp(managerScript.splats[selected_splat_index].paintRules.heightMaxEnd, managerScript.splats[selected_splat_index].paintRules.heightMaxStart, managerScript.maxTerrainHeight); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); managerScript.splats[selected_splat_index].paintRules.heightTransitionFrequency = EditorGUILayout.Slider("Height Transition Ferquency", managerScript.splats[selected_splat_index].paintRules.heightTransitionFrequency, 0f, 5f); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); managerScript.splats[selected_splat_index].paintRules.heightTransitionCutoff = EditorGUILayout.Slider("Height Transition Cutoff", managerScript.splats[selected_splat_index].paintRules.heightTransitionCutoff, 0f, 1f); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Slope : Min Start -- Min End -- Max Start -- Max End"); EditorGUILayout.BeginHorizontal(); managerScript.splats[selected_splat_index].paintRules.slopeMinStart = Mathf.Clamp(EditorGUILayout.DelayedFloatField(managerScript.splats[selected_splat_index].paintRules.slopeMinStart), 0f, managerScript.splats[selected_splat_index].paintRules.slopeMinEnd); managerScript.splats[selected_splat_index].paintRules.slopeMinEnd = Mathf.Clamp(EditorGUILayout.DelayedFloatField(managerScript.splats[selected_splat_index].paintRules.slopeMinEnd), 0f, 90f); managerScript.splats[selected_splat_index].paintRules.slopeMaxStart = Mathf.Clamp(EditorGUILayout.DelayedFloatField(managerScript.splats[selected_splat_index].paintRules.slopeMaxStart), 0f, 90f); managerScript.splats[selected_splat_index].paintRules.slopeMaxEnd = Mathf.Clamp(EditorGUILayout.DelayedFloatField(managerScript.splats[selected_splat_index].paintRules.slopeMaxEnd), managerScript.splats[selected_splat_index].paintRules.slopeMaxStart, 90f); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.MinMaxSlider(ref managerScript.splats[selected_splat_index].paintRules.slopeMinEnd, ref managerScript.splats[selected_splat_index].paintRules.slopeMaxStart, 0f, 90f); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.MinMaxSlider(ref managerScript.splats[selected_splat_index].paintRules.slopeMinStart, ref managerScript.splats[selected_splat_index].paintRules.slopeMaxEnd, 0f, 90f); managerScript.splats[selected_splat_index].paintRules.slopeMinStart = Mathf.Clamp(managerScript.splats[selected_splat_index].paintRules.slopeMinStart, 0f, managerScript.splats[selected_splat_index].paintRules.slopeMinEnd); managerScript.splats[selected_splat_index].paintRules.slopeMaxEnd = Mathf.Clamp(managerScript.splats[selected_splat_index].paintRules.slopeMaxEnd, managerScript.splats[selected_splat_index].paintRules.slopeMaxStart, 90f); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); managerScript.splats[selected_splat_index].paintRules.slopeTransitionFrequency = EditorGUILayout.Slider("Slope Transition Ferquency", managerScript.splats[selected_splat_index].paintRules.slopeTransitionFrequency, 0f, 5f); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); managerScript.splats[selected_splat_index].paintRules.slopeTransitionCutoff = EditorGUILayout.Slider("Slope Transition Cutoff", managerScript.splats[selected_splat_index].paintRules.slopeTransitionCutoff, 0f, 1f); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); } else { EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Base splat don't have paint rule parameters."); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); if (EditorGUI.EndChangeCheck()) { managerScript.SaveSplatParameterModifications(selected_splat_index); managerScript.UpdateSplatmapMap(true); } } } } } else { EditorGUILayout.LabelField("Not initialized."); if (GUILayout.Button("FindTerrains")) { managerScript.FindTerrains(); } } } else { EditorGUILayout.LabelField("Updating terrains..."); if (GUILayout.Button("FindTerrains")) { managerScript.FindTerrains(); } } } else { if (managerScript.isUpdating == false) { managerScript.computeShader = (ComputeShader)EditorGUILayout.ObjectField("ComputeShader", managerScript.computeShader, typeof(ComputeShader)); } } }