code is working
/*
http://www.cgsoso.com/forum-211-1.html
CG搜搜 Unity3d 每日Unity3d插件免费更新 更有VIP资源!
CGSOSO 主打游戏开发,影视设计等CG资源素材。
插件如若商用,请务必官网购买!
daily assets update for try.
U should buy the asset from home store if u use it in your project!
*/
using UnityEngine;
using UnityEditor;
using System;
using System.Collections;
using System.Collections.Generic;
// -------------------------------------------------------------------------------------------------------- EDITOR
[CustomEditor(typeof(TerrainToolkit))]
public class TerrainToolkitEditor : Editor {
private bool showAdvancedSettings;
private bool showInterfaceSettings;
private string dragControl = "";
private bool assignTexture = false;
int i;
int n;
public override void OnInspectorGUI() {
EditorGUIUtility.LookLikeControls();
TerrainToolkit terrain = (TerrainToolkit) target as TerrainToolkit;
if (!terrain.gameObject) {
return;
}
Terrain terComponent = (Terrain) terrain.GetComponent(typeof(Terrain));
if (!terrain.guiSkin) {
terrain.guiSkin = (GUISkin) AssetDatabase.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/TerrainErosionEditorSkin.guiskin", typeof(GUISkin));
terrain.createIcon = (Texture2D) AssetDatabase.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/createIcon.png", typeof(Texture2D));
terrain.erodeIcon = (Texture2D) AssetDatabase.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/erodeIcon.png", typeof(Texture2D));
terrain.textureIcon = (Texture2D) AssetDatabase.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/textureIcon.png", typeof(Texture2D));
terrain.mooreIcon = (Texture2D) AssetDatabase.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/mooreIcon.png", typeof(Texture2D));
terrain.vonNeumannIcon = (Texture2D) AssetDatabase.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/vonNeumannIcon.png", typeof(Texture2D));
terrain.mountainsIcon = (Texture2D) AssetDatabase.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/mountainsIcon.png", typeof(Texture2D));
terrain.hillsIcon = (Texture2D) AssetDatabase.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/hillsIcon.png", typeof(Texture2D));
terrain.plateausIcon = (Texture2D) AssetDatabase.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/plateausIcon.png", typeof(Texture2D));
terrain.defaultTexture = (Texture2D) AssetDatabase.LoadAssetAtPath("Assets/TerrainToolkit/Textures/default.jpg", typeof(Texture2D));
}
if (!terrain.presetsInitialised) {
terrain.addPresets();
}
if (terComponent == null) {
EditorGUILayout.Separator();
EditorGUILayout.BeginHorizontal();
GUI.skin = terrain.guiSkin;
GUILayout.Label("The GameObject that Terrain Toolkit is attached to", "errorText");
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("does not have a Terrain component.", "errorText");
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("Please attach a Terrain component.", "errorText");
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
return;
}
if (terrain.heightBlendPoints == null) {
terrain.heightBlendPoints = new List<float>();
}
Rect buttonRect;
EditorGUILayout.Separator();
EditorGUILayout.BeginHorizontal();
GUIContent[] toolbarOptions = new GUIContent[3];
toolbarOptions[0] = new GUIContent("Create", terrain.createIcon);
toolbarOptions[1] = new GUIContent("Erode", terrain.erodeIcon);
toolbarOptions[2] = new GUIContent("Texture", terrain.textureIcon);
terrain.toolModeInt = GUILayout.Toolbar(terrain.toolModeInt, toolbarOptions);
EditorGUILayout.EndHorizontal();
switch (terrain.toolModeInt) {
// -------------------------------------------------------------------------------------------------------- GENERATOR TOOLS
case 0:
EditorGUILayout.Separator();
EditorGUILayout.BeginHorizontal();
string[] generatorOptions = new string[5];
generatorOptions[0] = "Voronoi";
generatorOptions[1] = "Fractal";
generatorOptions[2] = "Perlin";
generatorOptions[3] = "Smooth";
generatorOptions[4] = "Normalise";
terrain.generatorTypeInt = GUILayout.Toolbar(terrain.generatorTypeInt, generatorOptions);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
switch (terrain.generatorTypeInt) {
case 0:
// Voronoi...
EditorGUILayout.BeginHorizontal();
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.PrefixLabel("Preset");
string[] voronoiPresetNames = new string[terrain.voronoiPresets.Count + 1];
int[] voronoiPresetInts = new int[terrain.voronoiPresets.Count + 1];
voronoiPresetNames[0] = "None";
TerrainToolkit.voronoiPresetData voronoiPreset;
for (i = 1; i <= terrain.voronoiPresets.Count; i++) {
voronoiPreset = (TerrainToolkit.voronoiPresetData) terrain.voronoiPresets[i - 1];
voronoiPresetNames *= voronoiPreset.presetName;*
_ voronoiPresetInts = i;_
* }*
* terrain.voronoiPresetId = EditorGUILayout.IntPopup(terrain.voronoiPresetId, voronoiPresetNames, voronoiPresetInts);*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.Separator();*
* if (GUI.changed && terrain.voronoiPresetId > 0) {*
* voronoiPreset = (TerrainToolkit.voronoiPresetData) terrain.voronoiPresets[terrain.voronoiPresetId - 1];*
* terrain.setVoronoiPreset(voronoiPreset);*
* }*
* if (GUI.changed) {*
* EditorUtility.SetDirty(terrain);*
* }*
* GUI.changed = false;*
* Rect featureRect = EditorGUILayout.BeginHorizontal();*
* featureRect.x = 110;*
* featureRect.width = 120;*
* featureRect.height = 20;*
* EditorGUILayout.PrefixLabel(“Feature type”);*
* GUIContent[] featureStates = new GUIContent[3];*
* featureStates[0] = new GUIContent(terrain.mountainsIcon);*
* featureStates[1] = new GUIContent(terrain.hillsIcon);*
* featureStates[2] = new GUIContent(terrain.plateausIcon);*
* terrain.voronoiTypeInt = GUI.Toolbar(featureRect, terrain.voronoiTypeInt, featureStates);*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.Separator();*
* EditorGUILayout.BeginHorizontal();*
* EditorGUILayout.PrefixLabel(“Cells”);*
* terrain.voronoiCells = (int) EditorGUILayout.Slider(terrain.voronoiCells, 2, 100);*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.BeginHorizontal();*
* EditorGUILayout.PrefixLabel(“Features”);*
* terrain.voronoiFeatures = EditorGUILayout.Slider(terrain.voronoiFeatures, 0.0f, 1.0f);*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.BeginHorizontal();*
* EditorGUILayout.PrefixLabel(“Scale”);*
* terrain.voronoiScale = EditorGUILayout.Slider(terrain.voronoiScale, 0.0f, 1.0f);*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.BeginHorizontal();*
* EditorGUILayout.PrefixLabel(“Blend”);*
* terrain.voronoiBlend = EditorGUILayout.Slider(terrain.voronoiBlend, 0.0f, 1.0f);*
* EditorGUILayout.EndHorizontal();*
* if (GUI.changed) {*
* terrain.voronoiPresetId = 0;*
* }*
* EditorGUILayout.Separator();*
* buttonRect = EditorGUILayout.BeginHorizontal();*
* buttonRect.x = buttonRect.width / 2 - 100;*
* buttonRect.width = 200;*
* buttonRect.height = 18;*
* GUI.skin = terrain.guiSkin;*
* if (GUI.Button(buttonRect, “Generate Voronoi Features”)) {*
* // Undo…*
* Terrain ter = (Terrain) terrain.GetComponent(typeof(Terrain));*
* if (ter == null) {*
* return;*
* }*
* TerrainData terData = ter.terrainData;*
* Undo.RegisterUndo(terData, “Terrain Generator”);*
* TerrainToolkit.GeneratorProgressDelegate generatorProgressDelegate = new TerrainToolkit.GeneratorProgressDelegate(updateGeneratorProgress);*
* terrain.generateTerrain(generatorProgressDelegate);*
* EditorUtility.ClearProgressBar();*
* GUIUtility.ExitGUI();*
* }*
* GUI.skin = null;*
* EditorGUIUtility.LookLikeControls();*
* EditorGUILayout.EndHorizontal();*
* break;*
* case 1:*
* // Diamond square…*
* EditorGUILayout.BeginHorizontal();*
* if (GUI.changed) {*
* EditorUtility.SetDirty(terrain);*
* }*
* GUI.changed = false;*
* EditorGUILayout.PrefixLabel(“Preset”);*
* string[] fractalPresetNames = new string[terrain.fractalPresets.Count + 1];*
* int[] fractalPresetInts = new int[terrain.fractalPresets.Count + 1];*
* fractalPresetNames[0] = “None”;*
* TerrainToolkit.fractalPresetData fractalPreset;*
* for (i = 1; i <= terrain.fractalPresets.Count; i++) {*
* fractalPreset = (TerrainToolkit.fractalPresetData) terrain.fractalPresets[i - 1];*
_ fractalPresetNames = fractalPreset.presetName;
fractalPresetInts = i;
* }
terrain.fractalPresetId = EditorGUILayout.IntPopup(terrain.fractalPresetId, fractalPresetNames, fractalPresetInts);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed && terrain.fractalPresetId > 0) {
fractalPreset = (TerrainToolkit.fractalPresetData) terrain.fractalPresets[terrain.fractalPresetId - 1];
terrain.setFractalPreset(fractalPreset);
}
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Delta”);
terrain.diamondSquareDelta = EditorGUILayout.Slider(terrain.diamondSquareDelta, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Blend”);
terrain.diamondSquareBlend = EditorGUILayout.Slider(terrain.diamondSquareBlend, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed) {
terrain.fractalPresetId = 0;
}
buttonRect = EditorGUILayout.BeginHorizontal();
buttonRect.x = buttonRect.width / 2 - 100;
buttonRect.width = 200;
buttonRect.height = 18;
GUI.skin = terrain.guiSkin;
if (GUI.Button(buttonRect, “Generate Fractal Terrain”)) {
// Undo…
Terrain ter = (Terrain) terrain.GetComponent(typeof(Terrain));
if (ter == null) {
return;
}
TerrainData terData = ter.terrainData;
Undo.RegisterUndo(terData, “Terrain Generator”);
TerrainToolkit.GeneratorProgressDelegate generatorProgressDelegate = new TerrainToolkit.GeneratorProgressDelegate(updateGeneratorProgress);
terrain.generateTerrain(generatorProgressDelegate);
EditorUtility.ClearProgressBar();
GUIUtility.ExitGUI();
}
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
break;
case 2:
// Perlin…
EditorGUILayout.BeginHorizontal();
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.PrefixLabel(“Preset”);
string perlinPresetNames = new string[terrain.perlinPresets.Count + 1];
int perlinPresetInts = new int[terrain.perlinPresets.Count + 1];
perlinPresetNames[0] = “None”;
TerrainToolkit.perlinPresetData perlinPreset;
for (i = 1; i <= terrain.perlinPresets.Count; i++) {
perlinPreset = (TerrainToolkit.perlinPresetData) terrain.perlinPresets[i - 1];
perlinPresetNames = perlinPreset.presetName;
perlinPresetInts = i;
}
terrain.perlinPresetId = EditorGUILayout.IntPopup(terrain.perlinPresetId, perlinPresetNames, perlinPresetInts);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed && terrain.perlinPresetId > 0) {
perlinPreset = (TerrainToolkit.perlinPresetData) terrain.perlinPresets[terrain.perlinPresetId - 1];
terrain.setPerlinPreset(perlinPreset);
}
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Frequency”);
terrain.perlinFrequency = EditorGUILayout.IntSlider(terrain.perlinFrequency, 1, 16);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Amplitude”);
terrain.perlinAmplitude = EditorGUILayout.Slider(terrain.perlinAmplitude, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Octaves”);
terrain.perlinOctaves = EditorGUILayout.IntSlider(terrain.perlinOctaves, 1, 12);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Blend”);
terrain.perlinBlend = EditorGUILayout.Slider(terrain.perlinBlend, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed) {
terrain.perlinPresetId = 0;
}
buttonRect = EditorGUILayout.BeginHorizontal();
buttonRect.x = buttonRect.width / 2 - 100;
buttonRect.width = 200;
buttonRect.height = 18;
GUI.skin = terrain.guiSkin;
if (GUI.Button(buttonRect, “Generate Perlin Terrain”)) {
// Undo…
Terrain ter = (Terrain) terrain.GetComponent(typeof(Terrain));
if (ter == null) {
return;
}
TerrainData terData = ter.terrainData;
Undo.RegisterUndo(terData, “Terrain Generator”);
TerrainToolkit.GeneratorProgressDelegate generatorProgressDelegate = new TerrainToolkit.GeneratorProgressDelegate(updateGeneratorProgress);
terrain.generateTerrain(generatorProgressDelegate);
EditorUtility.ClearProgressBar();
GUIUtility.ExitGUI();
}
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
break;
case 3:
// Smooth…
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Iterations”);
terrain.smoothIterations = (int) EditorGUILayout.Slider(terrain.smoothIterations, 1, 5);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Blend”);
terrain.smoothBlend = EditorGUILayout.Slider(terrain.smoothBlend, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
buttonRect = EditorGUILayout.BeginHorizontal();
buttonRect.x = buttonRect.width / 2 - 100;
buttonRect.width = 200;
buttonRect.height = 18;
GUI.skin = terrain.guiSkin;
if (GUI.Button(buttonRect, “Smooth Terrain”)) {
// Undo…
Terrain ter = (Terrain) terrain.GetComponent(typeof(Terrain));
if (ter == null) {
return;
}
TerrainData terData = ter.terrainData;
Undo.RegisterUndo(terData, “Smooth Terrain”);
TerrainToolkit.GeneratorProgressDelegate generatorProgressDelegate = new TerrainToolkit.GeneratorProgressDelegate(updateGeneratorProgress);
terrain.generateTerrain(generatorProgressDelegate);
EditorUtility.ClearProgressBar();
GUIUtility.ExitGUI();
}
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
break;
case 4:
// Normalise…
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Minimum height”);
terrain.normaliseMin = EditorGUILayout.Slider(terrain.normaliseMin, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Maximum height”);
terrain.normaliseMax = EditorGUILayout.Slider(terrain.normaliseMax, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Blend”);
terrain.normaliseBlend = EditorGUILayout.Slider(terrain.normaliseBlend, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
buttonRect = EditorGUILayout.BeginHorizontal();
buttonRect.x = buttonRect.width / 2 - 100;
buttonRect.width = 200;
buttonRect.height = 18;
GUI.skin = terrain.guiSkin;
if (GUI.Button(buttonRect, “Normalise Terrain”)) {
// Undo…
Terrain ter = (Terrain) terrain.GetComponent(typeof(Terrain));
if (ter == null) {
return;
}
TerrainData terData = ter.terrainData;
Undo.RegisterUndo(terData, “Normalise Terrain”);
TerrainToolkit.GeneratorProgressDelegate generatorProgressDelegate = new TerrainToolkit.GeneratorProgressDelegate(updateGeneratorProgress);
terrain.generateTerrain(generatorProgressDelegate);
EditorUtility.ClearProgressBar();
GUIUtility.ExitGUI();
}
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
break;
}
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
drawAdvancedSettingsGUI();
break;
// -------------------------------------------------------------------------------------------------------- EROSION TOOLS*
* case 1:
EditorGUILayout.Separator();
EditorGUILayout.BeginHorizontal();
string erosionOptions = new string[4];
erosionOptions[0] = “Thermal”;
erosionOptions[1] = “Hydraulic”;
erosionOptions[2] = “Tidal”;
erosionOptions[3] = “Wind”;
terrain.erosionTypeInt = GUILayout.Toolbar(terrain.erosionTypeInt, erosionOptions);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.BeginHorizontal();
GUI.skin = terrain.guiSkin;
GUILayout.Label(“Filters”);
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
switch (terrain.erosionTypeInt) {
case 0:
// Thermal…
EditorGUILayout.BeginHorizontal();
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.PrefixLabel(“Preset”);
string thermalErosionPresetNames = new string[terrain.thermalErosionPresets.Count + 1];
int thermalErosionPresetInts = new int[terrain.thermalErosionPresets.Count + 1];
thermalErosionPresetNames[0] = “None”;
TerrainToolkit.thermalErosionPresetData thermalErosionPreset;
for (i = 1; i <= terrain.thermalErosionPresets.Count; i++) {
thermalErosionPreset = (TerrainToolkit.thermalErosionPresetData) terrain.thermalErosionPresets[i - 1];
thermalErosionPresetNames = thermalErosionPreset.presetName;
thermalErosionPresetInts = i;
}
terrain.thermalErosionPresetId = EditorGUILayout.IntPopup(terrain.thermalErosionPresetId, thermalErosionPresetNames, thermalErosionPresetInts);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed && terrain.thermalErosionPresetId > 0) {
thermalErosionPreset = (TerrainToolkit.thermalErosionPresetData) terrain.thermalErosionPresets[terrain.thermalErosionPresetId - 1];
terrain.setThermalErosionPreset(thermalErosionPreset);
}
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Iterations”);
terrain.thermalIterations = (int) EditorGUILayout.Slider(terrain.thermalIterations, 1, 250);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Minimum slope”);
terrain.thermalMinSlope = EditorGUILayout.Slider(terrain.thermalMinSlope, 0.01f, 89.99f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Falloff”);
terrain.thermalFalloff = EditorGUILayout.Slider(terrain.thermalFalloff, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed) {
terrain.thermalErosionPresetId = 0;
}
buttonRect = EditorGUILayout.BeginHorizontal();
buttonRect.x = buttonRect.width / 2 - 100;
buttonRect.width = 200;
buttonRect.height = 18;
GUI.skin = terrain.guiSkin;
if (GUI.Button(buttonRect, “Apply thermal erosion”)) {
// Undo*
* Terrain ter = (Terrain) terrain.GetComponent(typeof(Terrain));
if (ter == null) {
return;
}
TerrainData terData = ter.terrainData;
Undo.RegisterUndo(terData, “Terrain Erosion”);
// Start time…
DateTime startTime = DateTime.Now;
TerrainToolkit.ErosionProgressDelegate erosionProgressDelegate = new TerrainToolkit.ErosionProgressDelegate(updateErosionProgress);
terrain.erodeAllTerrain(erosionProgressDelegate);
EditorUtility.ClearProgressBar();
TimeSpan processTime = DateTime.Now - startTime;
Debug.Log("Process complete in: "+processTime.ToString());
GUIUtility.ExitGUI();
}
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
break;
case 1:
// Hydraulic…
Rect toggleRect = EditorGUILayout.BeginHorizontal();
toggleRect.x = 110;
toggleRect.width = 180;
toggleRect.height = 20;
EditorGUILayout.PrefixLabel(“Type”);
string toggleStates = new string[3];
toggleStates[0] = “Fast”;
toggleStates[1] = “Full”;
toggleStates[2] = “Velocity”;
terrain.hydraulicTypeInt = GUI.Toolbar(toggleRect, terrain.hydraulicTypeInt, toggleStates);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
switch (terrain.hydraulicTypeInt) {
case 0:
// Fast…
EditorGUILayout.BeginHorizontal();
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.PrefixLabel(“Preset”);
string fastHydraulicErosionPresetNames = new string[terrain.fastHydraulicErosionPresets.Count + 1];
int fastHydraulicErosionPresetInts = new int[terrain.fastHydraulicErosionPresets.Count + 1];
fastHydraulicErosionPresetNames[0] = “None”;
TerrainToolkit.fastHydraulicErosionPresetData fastHydraulicErosionPreset;
for (i = 1; i <= terrain.fastHydraulicErosionPresets.Count; i++) {
fastHydraulicErosionPreset = (TerrainToolkit.fastHydraulicErosionPresetData) terrain.fastHydraulicErosionPresets[i - 1];
fastHydraulicErosionPresetNames = fastHydraulicErosionPreset.presetName;
fastHydraulicErosionPresetInts = i;
}
terrain.fastHydraulicErosionPresetId = EditorGUILayout.IntPopup(terrain.fastHydraulicErosionPresetId, fastHydraulicErosionPresetNames, fastHydraulicErosionPresetInts);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed && terrain.fastHydraulicErosionPresetId > 0) {
fastHydraulicErosionPreset = (TerrainToolkit.fastHydraulicErosionPresetData) terrain.fastHydraulicErosionPresets[terrain.fastHydraulicErosionPresetId - 1];
terrain.setFastHydraulicErosionPreset(fastHydraulicErosionPreset);
}
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Iterations”);
terrain.hydraulicIterations = (int) EditorGUILayout.Slider(terrain.hydraulicIterations, 1, 250);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Maximum slope”);
terrain.hydraulicMaxSlope = EditorGUILayout.Slider(terrain.hydraulicMaxSlope, 0.0f, 89.99f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Falloff”);
terrain.hydraulicFalloff = EditorGUILayout.Slider(terrain.hydraulicFalloff, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
if (GUI.changed) {
terrain.fastHydraulicErosionPresetId = 0;
}
break;
case 1:
// Full…
EditorGUILayout.BeginHorizontal();
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.PrefixLabel(“Preset”);
string fullHydraulicErosionPresetNames = new string[terrain.fullHydraulicErosionPresets.Count + 1];
int fullHydraulicErosionPresetInts = new int[terrain.fullHydraulicErosionPresets.Count + 1];
fullHydraulicErosionPresetNames[0] = “None”;
TerrainToolkit.fullHydraulicErosionPresetData fullHydraulicErosionPreset;
for (i = 1; i <= terrain.fullHydraulicErosionPresets.Count; i++) {
fullHydraulicErosionPreset = (TerrainToolkit.fullHydraulicErosionPresetData) terrain.fullHydraulicErosionPresets[i - 1];
fullHydraulicErosionPresetNames = fullHydraulicErosionPreset.presetName;
fullHydraulicErosionPresetInts = i;
}
terrain.fullHydraulicErosionPresetId = EditorGUILayout.IntPopup(terrain.fullHydraulicErosionPresetId, fullHydraulicErosionPresetNames, fullHydraulicErosionPresetInts);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed && terrain.fullHydraulicErosionPresetId > 0) {
fullHydraulicErosionPreset = (TerrainToolkit.fullHydraulicErosionPresetData) terrain.fullHydraulicErosionPresets[terrain.fullHydraulicErosionPresetId - 1];
terrain.setFullHydraulicErosionPreset(fullHydraulicErosionPreset);
}
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Iterations”);
terrain.hydraulicIterations = (int) EditorGUILayout.Slider(terrain.hydraulicIterations, 1, 250);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Rainfall”);
terrain.hydraulicRainfall = EditorGUILayout.Slider(terrain.hydraulicRainfall, 0, 1);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Evaporation”);
terrain.hydraulicEvaporation = EditorGUILayout.Slider(terrain.hydraulicEvaporation, 0, 1);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Solubility”);
terrain.hydraulicSedimentSolubility = EditorGUILayout.Slider(terrain.hydraulicSedimentSolubility, 0, 1);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Saturation”);
terrain.hydraulicSedimentSaturation = EditorGUILayout.Slider(terrain.hydraulicSedimentSaturation, 0, 1);
EditorGUILayout.EndHorizontal();
if (GUI.changed) {
terrain.fullHydraulicErosionPresetId = 0;
}
break;
case 2:
// Velocity…
EditorGUILayout.BeginHorizontal();
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.PrefixLabel(“Preset”);
string velocityHydraulicErosionPresetNames = new string[terrain.velocityHydraulicErosionPresets.Count + 1];
int velocityHydraulicErosionPresetInts = new int[terrain.velocityHydraulicErosionPresets.Count + 1];
velocityHydraulicErosionPresetNames[0] = “None”;
TerrainToolkit.velocityHydraulicErosionPresetData velocityHydraulicErosionPreset;
for (i = 1; i <= terrain.velocityHydraulicErosionPresets.Count; i++) {
velocityHydraulicErosionPreset = (TerrainToolkit.velocityHydraulicErosionPresetData) terrain.velocityHydraulicErosionPresets[i - 1];
velocityHydraulicErosionPresetNames = velocityHydraulicErosionPreset.presetName;
velocityHydraulicErosionPresetInts = i;
}
terrain.velocityHydraulicErosionPresetId = EditorGUILayout.IntPopup(terrain.velocityHydraulicErosionPresetId, velocityHydraulicErosionPresetNames, velocityHydraulicErosionPresetInts);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed && terrain.velocityHydraulicErosionPresetId > 0) {
velocityHydraulicErosionPreset = (TerrainToolkit.velocityHydraulicErosionPresetData) terrain.velocityHydraulicErosionPresets[terrain.velocityHydraulicErosionPresetId - 1];
terrain.setVelocityHydraulicErosionPreset(velocityHydraulicErosionPreset);
}
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Iterations”);
terrain.hydraulicIterations = (int) EditorGUILayout.Slider(terrain.hydraulicIterations, 1, 250);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Rainfall”);
terrain.hydraulicVelocityRainfall = EditorGUILayout.Slider(terrain.hydraulicVelocityRainfall, 0, 1);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Evaporation”);
terrain.hydraulicVelocityEvaporation = EditorGUILayout.Slider(terrain.hydraulicVelocityEvaporation, 0, 1);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Solubility”);
terrain.hydraulicVelocitySedimentSolubility = EditorGUILayout.Slider(terrain.hydraulicVelocitySedimentSolubility, 0, 1);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Saturation”);
terrain.hydraulicVelocitySedimentSaturation = EditorGUILayout.Slider(terrain.hydraulicVelocitySedimentSaturation, 0, 1);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Velocity”);
terrain.hydraulicVelocity = EditorGUILayout.Slider(terrain.hydraulicVelocity, 0, 10);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Momentum”);
terrain.hydraulicMomentum = EditorGUILayout.Slider(terrain.hydraulicMomentum, 0, 10);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Entropy”);
terrain.hydraulicEntropy = EditorGUILayout.Slider(terrain.hydraulicEntropy, 0, 1);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Downcutting”);
terrain.hydraulicDowncutting = EditorGUILayout.Slider(terrain.hydraulicDowncutting, 0, 1);
EditorGUILayout.EndHorizontal();
if (GUI.changed) {
terrain.velocityHydraulicErosionPresetId = 0;
}
break;
}
EditorGUILayout.Separator();
buttonRect = EditorGUILayout.BeginHorizontal();
buttonRect.x = buttonRect.width / 2 - 100;
buttonRect.width = 200;
buttonRect.height = 18;
GUI.skin = terrain.guiSkin;
if (GUI.Button(buttonRect, “Apply hydraulic erosion”)) {
// Undo*
* Terrain ter = (Terrain) terrain.GetComponent(typeof(Terrain));
if (ter == null) {
return;
}
TerrainData terData = ter.terrainData;
Undo.RegisterUndo(terData, “Terrain Erosion”);
// Start time…
DateTime startTime = DateTime.Now;
TerrainToolkit.ErosionProgressDelegate erosionProgressDelegate = new TerrainToolkit.ErosionProgressDelegate(updateErosionProgress);
terrain.erodeAllTerrain(erosionProgressDelegate);
EditorUtility.ClearProgressBar();
TimeSpan processTime = DateTime.Now - startTime;
Debug.Log("Process complete in: "+processTime.ToString());
GUIUtility.ExitGUI();
}
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
break;
case 2:
// Tidal…
EditorGUILayout.BeginHorizontal();
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.PrefixLabel(“Preset”);
string tidalErosionPresetNames = new string[terrain.tidalErosionPresets.Count + 1];
int tidalErosionPresetInts = new int[terrain.tidalErosionPresets.Count + 1];
tidalErosionPresetNames[0] = “None”;
TerrainToolkit.tidalErosionPresetData tidalErosionPreset;
for (i = 1; i <= terrain.tidalErosionPresets.Count; i++) {
tidalErosionPreset = (TerrainToolkit.tidalErosionPresetData) terrain.tidalErosionPresets[i - 1];
tidalErosionPresetNames = tidalErosionPreset.presetName;
tidalErosionPresetInts = i;
}
terrain.tidalErosionPresetId = EditorGUILayout.IntPopup(terrain.tidalErosionPresetId, tidalErosionPresetNames, tidalErosionPresetInts);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed && terrain.tidalErosionPresetId > 0) {
tidalErosionPreset = (TerrainToolkit.tidalErosionPresetData) terrain.tidalErosionPresets[terrain.tidalErosionPresetId - 1];
terrain.setTidalErosionPreset(tidalErosionPreset);
}
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Iterations”);
terrain.tidalIterations = (int) EditorGUILayout.Slider(terrain.tidalIterations, 1, 250);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Sea level”);
terrain.tidalSeaLevel = EditorGUILayout.FloatField(terrain.tidalSeaLevel);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Tidal range”);
terrain.tidalRangeAmount = EditorGUILayout.FloatField(terrain.tidalRangeAmount);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Cliff limit”);
terrain.tidalCliffLimit = EditorGUILayout.Slider(terrain.tidalCliffLimit, 0.0f, 90.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed) {
terrain.tidalErosionPresetId = 0;
}
buttonRect = EditorGUILayout.BeginHorizontal();
buttonRect.x = buttonRect.width / 2 - 100;
buttonRect.width = 200;
buttonRect.height = 18;
GUI.skin = terrain.guiSkin;
if (GUI.Button(buttonRect, “Apply tidal erosion”)) {
// Undo*
* Terrain ter = (Terrain) terrain.GetComponent(typeof(Terrain));
if (ter == null) {
return;
}
TerrainData terData = ter.terrainData;
Undo.RegisterUndo(terData, “Terrain Erosion”);
// Start time…
DateTime startTime = DateTime.Now;
TerrainToolkit.ErosionProgressDelegate erosionProgressDelegate = new TerrainToolkit.ErosionProgressDelegate(updateErosionProgress);
terrain.erodeAllTerrain(erosionProgressDelegate);
EditorUtility.ClearProgressBar();
TimeSpan processTime = DateTime.Now - startTime;
Debug.Log("Process complete in: "+processTime.ToString());
GUIUtility.ExitGUI();
}
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
break;
case 3:
// Wind…
EditorGUILayout.BeginHorizontal();
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.PrefixLabel(“Preset”);
string windErosionPresetNames = new string[terrain.windErosionPresets.Count + 1];
int windErosionPresetInts = new int[terrain.windErosionPresets.Count + 1];
windErosionPresetNames[0] = “None”;
TerrainToolkit.windErosionPresetData windErosionPreset;
for (i = 1; i <= terrain.windErosionPresets.Count; i++) {
windErosionPreset = (TerrainToolkit.windErosionPresetData) terrain.windErosionPresets[i - 1];
windErosionPresetNames = windErosionPreset.presetName;
windErosionPresetInts = i;
}
terrain.windErosionPresetId = EditorGUILayout.IntPopup(terrain.windErosionPresetId, windErosionPresetNames, windErosionPresetInts);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed && terrain.windErosionPresetId > 0) {
windErosionPreset = (TerrainToolkit.windErosionPresetData) terrain.windErosionPresets[terrain.windErosionPresetId - 1];
terrain.setWindErosionPreset(windErosionPreset);
}
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Iterations”);
terrain.windIterations = (int) EditorGUILayout.Slider(terrain.windIterations, 1, 250);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
terrain.windDirection = EditorGUILayout.Slider(“Wind direction”, terrain.windDirection, 0.0f, 360.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
terrain.windForce = EditorGUILayout.Slider(“Wind force”, terrain.windForce, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
terrain.windLift = EditorGUILayout.Slider(“Lift”, terrain.windLift, 0.0f, 0.01f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
terrain.windGravity = EditorGUILayout.Slider(“Gravity”, terrain.windGravity, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
terrain.windCapacity = EditorGUILayout.Slider(“Capacity”, terrain.windCapacity, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
terrain.windEntropy = EditorGUILayout.Slider(“Entropy”, terrain.windEntropy, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
terrain.windSmoothing = EditorGUILayout.Slider(“Smoothing”, terrain.windSmoothing, 0.0f, 1.0f);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
if (GUI.changed) {
terrain.windErosionPresetId = 0;
}
buttonRect = EditorGUILayout.BeginHorizontal();
buttonRect.x = buttonRect.width / 2 - 100;
buttonRect.width = 200;
buttonRect.height = 18;
GUI.skin = terrain.guiSkin;
if (GUI.Button(buttonRect, “Apply wind erosion”)) {
// Undo*
* Terrain ter = (Terrain) terrain.GetComponent(typeof(Terrain));
if (ter == null) {
return;
}
TerrainData terData = ter.terrainData;
Undo.RegisterUndo(terData, “Terrain Erosion”);
// Start time…
DateTime startTime = DateTime.Now;
TerrainToolkit.ErosionProgressDelegate erosionProgressDelegate = new TerrainToolkit.ErosionProgressDelegate(updateErosionProgress);
terrain.erodeAllTerrain(erosionProgressDelegate);
EditorUtility.ClearProgressBar();
TimeSpan processTime = DateTime.Now - startTime;
Debug.Log("Process complete in: "+processTime.ToString());
GUIUtility.ExitGUI();
}
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
break;
}
if (terrain.erosionTypeInt == 0 || terrain.erosionTypeInt == 2 || (terrain.erosionTypeInt == 1 && terrain.hydraulicTypeInt == 0)) {
EditorGUILayout.Separator();
drawBrushToolsGUI();
} else {
EditorGUILayout.Separator();
EditorGUILayout.Separator();
}
EditorGUILayout.Separator();
drawAdvancedSettingsGUI();
break;
// -------------------------------------------------------------------------------------------------------- TEXTURING TOOLS*
* case 2:
Terrain myter = (Terrain) terrain.GetComponent(typeof(Terrain));
if (myter == null)
{
return;
}
TerrainData myterData = myter.terrainData;
terrain.splatPrototypes = myterData.splatPrototypes;
EditorGUILayout.Separator();
float mouseX;
EditorGUILayout.BeginHorizontal();
GUI.skin = terrain.guiSkin;
GUILayout.Label(“Texture Slope”);
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
Rect gradientRect = EditorGUILayout.BeginHorizontal();
float gradientWidth = gradientRect.width - 55;
gradientRect.width = 15;
gradientRect.height = 19;
GUI.skin = terrain.guiSkin;
// Slope stop 1…
if (dragControl == “slopeStop1” && Event.current.type == EventType.MouseDrag) {
mouseX = Event.current.mousePosition.x - 7;
if (mouseX < 20) {
mouseX = 20;
} else if (mouseX > 19 + gradientWidth * (terrain.slopeBlendMaxAngle / 90)) {
mouseX = 19 + gradientWidth * (terrain.slopeBlendMaxAngle / 90);
}
gradientRect.x = mouseX;
terrain.slopeBlendMinAngle = ((mouseX - 20) / (gradientWidth + 1)) * 90;
} else {
gradientRect.x = 20 + gradientWidth * (terrain.slopeBlendMinAngle / 90);
}
if (Event.current.type == EventType.MouseDown && gradientRect.Contains(Event.current.mousePosition)) {
dragControl = “slopeStop1”;
}
if (dragControl == “slopeStop1” && Event.current.type == EventType.MouseUp) {
dragControl = “”;
}
GUI.Box(gradientRect, “”, “slopeStop1”);
// Slope stop 2…
if (dragControl == “slopeStop2” && Event.current.type == EventType.MouseDrag) {
mouseX = Event.current.mousePosition.x - 7;
if (mouseX < 21 + gradientWidth * (terrain.slopeBlendMinAngle / 90)) {
mouseX = 21 + gradientWidth * (terrain.slopeBlendMinAngle / 90);
} else if (mouseX > 21 + gradientWidth) {
mouseX = 21 + gradientWidth;
}
gradientRect.x = mouseX;
terrain.slopeBlendMaxAngle = ((mouseX - 20) / (gradientWidth + 1)) * 90;
} else {
gradientRect.x = 20 + gradientWidth * (terrain.slopeBlendMaxAngle / 90);
}
if (Event.current.type == EventType.MouseDown && gradientRect.Contains(Event.current.mousePosition)) {
dragControl = “slopeStop2”;
}
if (dragControl == “slopeStop2” && Event.current.type == EventType.MouseUp) {
dragControl = “”;
}
GUI.Box(gradientRect, “”, “slopeStop2”);
gradientRect.y += 19;
gradientRect.width = gradientWidth * (terrain.slopeBlendMinAngle / 90);
gradientRect.x = 27;
GUI.Box(gradientRect, “”, “black”);
gradientRect.width = gradientWidth * ((terrain.slopeBlendMaxAngle / 90) - (terrain.slopeBlendMinAngle / 90));
gradientRect.x = 27 + gradientWidth * (terrain.slopeBlendMinAngle / 90);
GUI.Box(gradientRect, “”, “blackToWhite”);
gradientRect.width = gradientWidth - gradientWidth * (terrain.slopeBlendMaxAngle / 90);
gradientRect.x = 27 + gradientWidth * (terrain.slopeBlendMaxAngle / 90);
GUI.Box(gradientRect, “”, “white”);
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Cliff start”);
terrain.slopeBlendMinAngle = EditorGUILayout.FloatField(terrain.slopeBlendMinAngle);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel(“Cliff end”);
terrain.slopeBlendMaxAngle = EditorGUILayout.FloatField(terrain.slopeBlendMaxAngle);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUI.skin = terrain.guiSkin;
GUILayout.Label(“Texture Height”);
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
gradientRect = EditorGUILayout.BeginHorizontal();
gradientWidth = gradientRect.width - 55;
gradientRect.width = 15;
gradientRect.height = 19;
Rect gradientRect2 = gradientRect;
gradientRect2.y += 19;
GUI.skin = terrain.guiSkin;
string gradientStyles = new string[9];
gradientStyles[0] = “red”;
gradientStyles[1] = “redToYellow”;
gradientStyles[2] = “yellow”;
gradientStyles[3] = “yellowToGreen”;
gradientStyles[4] = “green”;
gradientStyles[5] = “greenToCyan”;
gradientStyles[6] = “cyan”;
gradientStyles[7] = “cyanToBlue”;
gradientStyles[8] = “blue”;
List heightBlendPoints = terrain.heightBlendPoints;
int numPoints = heightBlendPoints.Count;
float firstLimit = 1;
if (numPoints > 0) {
firstLimit = (float) heightBlendPoints[0];
} else {
gradientRect.x = 20;
GUI.Box(gradientRect, “”, “greyStop”);
gradientRect.x = 20 + gradientWidth;
GUI.Box(gradientRect, “”, “greyStop”);
}
gradientRect2.width = gradientWidth * firstLimit;
gradientRect2.x = 27;
if (terrain.splatPrototypes.Length < 2) {
GUI.Box(gradientRect2, “”, “grey”);
} else {
GUI.Box(gradientRect2, “”, “red”);
}
for (i = 0; i < numPoints; i++) {
// Height stop…
float lowerLimit = 0;
float upperLimit = 1;
if (i > 0) {
lowerLimit = (float) heightBlendPoints[i - 1];
}
if (i < numPoints - 1) {
upperLimit = (float) heightBlendPoints[i + 1];
}
if (dragControl == “heightStop”+i && Event.current.type == EventType.MouseDrag) {
mouseX = Event.current.mousePosition.x - 7;
if (mouseX < 20 + gradientWidth * lowerLimit) {
mouseX = 20 + gradientWidth * lowerLimit;
} else if (mouseX > 19 + gradientWidth * upperLimit) {
mouseX = 19 + gradientWidth * upperLimit;
}
gradientRect.x = mouseX;
heightBlendPoints = (mouseX - 20) / (gradientWidth + 1);
} else {
gradientRect.x = 20 + gradientWidth * (float) heightBlendPoints;
}
if (Event.current.type == EventType.MouseDown && gradientRect.Contains(Event.current.mousePosition)) {
dragControl = “heightStop”+i;
}
if (dragControl == “heightStop”+i && Event.current.type == EventType.MouseUp) {
dragControl = “”;
}
int stopNum = (int) Mathf.Ceil((float) i / 2) + 1;
if (i % 2 == 0) {
GUI.Box(gradientRect, “”+stopNum, “blackStop”);
} else {
GUI.Box(gradientRect, “”+stopNum, “whiteStop”);
}
gradientRect2.width = gradientWidth * (upperLimit - (float) heightBlendPoints);
gradientRect2.x = 27 + gradientWidth * (float) heightBlendPoints;
GUI.Box(gradientRect2, “”, gradientStyles[i + 1]);
}
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
string startOrEnd = “end”;
for (i = 0; i < numPoints; i++) {
EditorGUILayout.BeginHorizontal();
int floatFieldNum = (int) Mathf.Ceil((float) i / 2) + 1;
EditorGUILayout.PrefixLabel("Texture “+floatFieldNum+” "+startOrEnd);_
heightBlendPoints _= EditorGUILayout.FloatField((float) heightBlendPoints);
EditorGUILayout.EndHorizontal();
if (startOrEnd == “end”) {
startOrEnd = “start”;
} else {
startOrEnd = “end”;
}
}
terrain.heightBlendPoints = heightBlendPoints;
EditorGUILayout.BeginHorizontal();
GUI.skin = terrain.guiSkin;
GUILayout.Label(“Textures”);
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
int nTextures = 0;
EditorGUILayout.Separator();
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
GUI.changed = false;
EditorGUILayout.BeginHorizontal();
foreach (SplatPrototype splatPrototype in terrain.splatPrototypes) {
EditorGUIUtility.LookLikeControls(80, 0);
Rect textureRect = EditorGUILayout.BeginHorizontal();
if (nTextures == 0) {
splatPrototype.texture = EditorGUILayout.ObjectField(“Cliff texture”, splatPrototype.texture, typeof(Texture2D)) as Texture2D;
} else {
splatPrototype.texture = EditorGUILayout.ObjectField("Texture "+nTextures, splatPrototype.texture, typeof(Texture2D)) as Texture2D;
}
GUI.skin = terrain.guiSkin;
textureRect.x += 146;
textureRect.width = 18;
textureRect.height = 18;
if (GUI.Button(textureRect, “”, “deleteButton”)) {
GUI.changed = true;
terrain.deleteSplatPrototype(terrain.tempTexture, nTextures);
EditorUtility.SetDirty(terrain);
}
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
if (nTextures % 2 == 1) {
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.BeginHorizontal();
}
nTextures++;
if (nTextures > 5) {
break;
}
}
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
if (GUI.changed) {
myterData.splatPrototypes = terrain.splatPrototypes;
}
if (nTextures == 0 && !assignTexture) {
EditorGUILayout.BeginHorizontal();
GUI.skin = terrain.guiSkin;
GUILayout.Label(“No textures have been assigned! Assign a texture.”, “errorText”);
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
}
if (nTextures < 6) {
EditorGUILayout.Separator();
buttonRect = EditorGUILayout.BeginHorizontal();
buttonRect.x = buttonRect.width / 2 - 50;
buttonRect.width = 100;
buttonRect.height = 18;
if (GUI.Button(buttonRect, “Add texture”)) {
terrain.addSplatPrototype(terrain.defaultTexture, nTextures);
myterData.splatPrototypes = terrain.splatPrototypes;
EditorUtility.SetDirty(terrain);
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
}
EditorGUILayout.Separator();
buttonRect = EditorGUILayout.BeginHorizontal();
buttonRect.x = buttonRect.width / 2 - 100;
buttonRect.width = 200;
buttonRect.height = 18;
GUI.skin = terrain.guiSkin;
if (nTextures < 2) {
GUI.Box(buttonRect, “Apply procedural texture”, “disabledButton”);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.BeginHorizontal();
GUILayout.Label(“This feature is disabled! You must assign at least 2 textures.”, “errorText”);
} else {
if (GUI.Button(buttonRect, “Apply procedural texture”)) {
// Undo not supported!
TerrainToolkit.TextureProgressDelegate textureProgressDelegate = new TerrainToolkit.TextureProgressDelegate(updateTextureProgress);
terrain.textureTerrain(textureProgressDelegate);
EditorUtility.ClearProgressBar();
GUIUtility.ExitGUI();
}
}
GUI.skin = null;
EditorGUIUtility.LookLikeControls();
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
EditorGUILayout.Separator();
drawAdvancedSettingsGUI();
// If the user has added or removed textures in the Terrain component, correct the number of blend points…
if (Event.current.type == EventType.Repaint) {
if (numPoints % 2 != 0) {
terrain.deleteAllBlendPoints();
}
int correctNumPoints = (nTextures - 2) * 2;
if (nTextures < 3) {
correctNumPoints = 0;
}
if (numPoints < correctNumPoints) {
terrain.addBlendPoints();
} else if (numPoints > correctNumPoints) {
terrain.deleteBlendPoints();
}
}
break;
}
if (GUI.changed) {
EditorUtility.SetDirty(terrain);
}
}*_
* public void OnSceneGUI() {*
* TerrainToolkit terrain = (TerrainToolkit) target as TerrainToolkit;*
* if (Event.current.type == EventType.MouseDown) {*
* terrain.isBrushPainting = true;*
* }*
* if (Event.current.type == EventType.MouseUp) {*
* terrain.isBrushPainting = false;*
* }*
* if (Event.current.shift) {*
* if (!terrain.isBrushPainting) {*
* // Undo…*
* Terrain ter = (Terrain) terrain.GetComponent(typeof(Terrain));*
* if (ter == null) {*
* return;*
* }*
* TerrainData terData = ter.terrainData;*
* Undo.RegisterUndo(terData, “Terrain Erosion Brush”);*
* }*
* terrain.isBrushPainting = true;*
* } else {*
* terrain.isBrushPainting = false;*
* }*
* terrain.isBrushHidden = false;*
* if (terrain.isBrushOn) {*
* Vector2 mouse = Event.current.mousePosition;*
* mouse.y = Camera.current.pixelHeight - mouse.y + 20;*
* Ray ray = Camera.current.ScreenPointToRay(mouse);*
* RaycastHit hit;*
* if (Physics.Raycast(ray, out hit, Mathf.Infinity)) {*
* if (hit.transform.GetComponent(“TerrainToolkit”)) {*
* terrain.brushPosition = hit.point;*
* if (terrain.isBrushPainting) {*
* // Paint…*
* terrain.paint();*
* }*
* }*
* } else {*
* terrain.isBrushHidden = true;*
* }*
* }*
* }*
* private void drawBrushToolsGUI() {*
* TerrainToolkit terrain = (TerrainToolkit) target as TerrainToolkit;*
* EditorGUILayout.Separator();*
* EditorGUILayout.Separator();*
* EditorGUILayout.BeginHorizontal();*
* GUI.skin = terrain.guiSkin;*
* GUILayout.Label(“Brushes”);*
* GUI.skin = null;*
* EditorGUIUtility.LookLikeControls();*
* EditorGUILayout.EndHorizontal();*
* Rect toggleRect = EditorGUILayout.BeginHorizontal();*
* toggleRect.x = 110;*
* toggleRect.width = 80;*
* toggleRect.height = 20;*
* EditorGUILayout.PrefixLabel(“Brush”);*
* string[] brushStates = new string[2];*
* brushStates[0] = “Off”;*
* brushStates[1] = “On”;*
* int brushInt = 0;*
* if (terrain.isBrushOn) {*
* brushInt = 1;*
* }*
* brushInt = GUI.Toolbar(toggleRect, brushInt, brushStates);*
* bool brushBool = false;*
* if (brushInt == 1) {*
* brushBool = true;*
* }*
* terrain.isBrushOn = brushBool;*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.Separator();*
* EditorGUILayout.BeginHorizontal();*
* GUILayout.Label(" HINTS:");*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.BeginHorizontal();*
* GUILayout.Label(" 1. Hold down the SHIFT key to use the brush");*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.BeginHorizontal();*
* GUILayout.Label(" 2. Use the brush PRESET for best results");*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.Separator();*
* EditorGUILayout.BeginHorizontal();*
* EditorGUILayout.PrefixLabel(“Brush size”);*
* terrain.brushSize = EditorGUILayout.Slider(terrain.brushSize, 1, 100);*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.BeginHorizontal();*
* EditorGUILayout.PrefixLabel(“Opacity”);*
* terrain.brushOpacity = EditorGUILayout.Slider(terrain.brushOpacity, 0, 1);*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.BeginHorizontal();*
* EditorGUILayout.PrefixLabel(“Softness”);*
* terrain.brushSoftness = EditorGUILayout.Slider(terrain.brushSoftness, 0, 1);*
* EditorGUILayout.EndHorizontal();*
* }*
* private void drawAdvancedSettingsGUI() {*
* TerrainToolkit terrain = (TerrainToolkit) target as TerrainToolkit;*
* EditorGUILayout.BeginHorizontal();*
* showAdvancedSettings = EditorGUILayout.Foldout(showAdvancedSettings, “Advanced settings”);*
* EditorGUILayout.EndHorizontal();*
* if (showAdvancedSettings) {*
* EditorGUILayout.Separator();*
* EditorGUILayout.BeginHorizontal();*
* GUILayout.Label(“Cell neighbourhood”);*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.BeginHorizontal();*
* GUIContent[] neighbourhoodOptions = new GUIContent[2];*
* neighbourhoodOptions[0] = new GUIContent(“Moore”, terrain.mooreIcon);*
* neighbourhoodOptions[1] = new GUIContent(“Von Neumann”, terrain.vonNeumannIcon);*
* terrain.neighbourhoodInt = GUILayout.Toolbar(terrain.neighbourhoodInt, neighbourhoodOptions);*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.Separator();*
* EditorGUILayout.BeginHorizontal();*
* GUILayout.Label(“Use difference maps in brush mode”);*
* EditorGUILayout.EndHorizontal();*
* Rect toggleRect = EditorGUILayout.BeginHorizontal();*
* toggleRect.x = 110;*
* toggleRect.width = 80;*
* toggleRect.height = 20;*
* string[] diffMapStates = new string[2];*
* diffMapStates[0] = “Off”;*
* diffMapStates[1] = “On”;*
* int diffMapInt = 0;*
* if (terrain.useDifferenceMaps) {*
* diffMapInt = 1;*
* }*
* diffMapInt = GUI.Toolbar(toggleRect, diffMapInt, diffMapStates);*
* bool diffMapBool = false;*
* if (diffMapInt == 1) {*
* diffMapBool = true;*
* }*
* terrain.useDifferenceMaps = diffMapBool;*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.Separator();*
* EditorGUILayout.Separator();*
* EditorGUILayout.Separator();*
* EditorGUILayout.Separator();*
* EditorGUILayout.Separator();*
* EditorGUILayout.BeginHorizontal();*
* if (GUILayout.Button(“Reload Presets”)) {*
* terrain.presetsInitialised = false;*
* }*
* EditorGUILayout.EndHorizontal();*
* EditorGUILayout.Separator();*
* }*
* }*
* public void updateErosionProgress(string titleString, string displayString, int iteration, int nIterations, float percentComplete) {*
* EditorUtility.DisplayProgressBar(titleString, displayString+" Iteration “+iteration+” of “+nIterations+”. Please wait.", percentComplete);*
* }*
* public void updateTextureProgress(string titleString, string displayString, float percentComplete) {*
* EditorUtility.DisplayProgressBar(titleString, displayString, percentComplete);*
* }*
* public void updateGeneratorProgress(string titleString, string displayString, float percentComplete) {*
* EditorUtility.DisplayProgressBar(titleString, displayString, percentComplete);*
* }*
}
// -------------------------------------------------------------------------------------------------------- END
What version of Unity are you using?
– AlucardJayunity 3.5.5f3
– dorpelegOk, I downloaded the 1.0.2 package. Now I have 2 errors instead of 62 :P One is on line 864 saying: "A local variable named 'ter' cannot be declared in this scope because it would give a different meaning to 'ter', which is already used in a 'child' scope to denote something else (CS0136) another error is at line 868, the errors is the same only with 'terData' instead of 'ter'. I also only get the 2 warnings in the editor console (didn't fix them yet), but when pressing "build all projects of all solutions" in MonoDevelop I get the errors I stated above (inside mono, not unity).
– dorpelegWell... your code seemed to have fixed the error on line 868. But the error on line 864 is still there. The variable name at line 864 is still 'ter', if I change it to myTer, the error is still there... I'm not sure how giving the code is a breaking any rule :) I don't mind you edited my title.
– dorpelegLOL, now both errors are back. I don't think it's conflicting with another script. I think it's conflicting with itself.
– dorpeleg