TerrainToolkit build errors

Hello everyone.

I’m using the TerrainToolkit from the unity website.

everything works fine.

But when I press “build all projects of all solutions” I get 62 errors in the TerrainToolkitEditor script.

All errors are the same: “the type or namespace name ‘TerrainToolkit’ could not be found”.

I really need to get this fixed, I can’t have any custom inspectors because of it.

Thanks.

What version of Unity are you using?

unity 3.5.5f3

Ok, 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).

Well... 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.

LOL, now both errors are back. I don't think it's conflicting with another script. I think it's conflicting with itself.

2 Answers

2

It appears that the compilation of this script is having issues in that particular version of Unity. I have isolated the offending local variables, and renamed them to restore the compilation to working, thus bringing back the script to its original functionality. Thanks to sixtimesnothing for making this great editing tool =]

Here is the fixed editor script. I have replaced the local variable names at 864 and 868, and where they are used in those functions/methods. Names went from ter to myTer, and terData to myTerData :

/*
---------------------- Unity Terrain Toolkit ----------------------
--
-- Unity Summer of Code 2009
-- Terrain Toolkit for Unity (Version 1.0.2)
-- All code by Sándor Moldán.
--
-- TerrainToolkitEditor.cs
--
-------------------------------------------------------------------
*/

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) Resources.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/TerrainErosionEditorSkin.guiskin", typeof(GUISkin));
			terrain.createIcon = (Texture2D) Resources.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/createIcon.png", typeof(Texture2D));
			terrain.erodeIcon = (Texture2D) Resources.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/erodeIcon.png", typeof(Texture2D));
			terrain.textureIcon = (Texture2D) Resources.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/textureIcon.png", typeof(Texture2D));
			terrain.mooreIcon = (Texture2D) Resources.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/mooreIcon.png", typeof(Texture2D));
			terrain.vonNeumannIcon = (Texture2D) Resources.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/vonNeumannIcon.png", typeof(Texture2D));
			terrain.mountainsIcon = (Texture2D) Resources.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/mountainsIcon.png", typeof(Texture2D));
			terrain.hillsIcon = (Texture2D) Resources.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/hillsIcon.png", typeof(Texture2D));
			terrain.plateausIcon = (Texture2D) Resources.LoadAssetAtPath("Assets/TerrainToolkit/Editor/Resources/plateausIcon.png", typeof(Texture2D));
			terrain.defaultTexture = (Texture2D) Resources.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), false) as Texture2D;
} else {
splatPrototype.texture = EditorGUILayout.ObjectField("Texture "+nTextures, splatPrototype.texture, typeof(Texture2D), false) 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

Can you just upload the FIXED version?

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