Example #1
0
    public override void OnInspectorGUI()
    {
        EditorGUIUtility.LookLikeControls();
        TerrainWaterErosion weTerrain = (TerrainWaterErosion)target as TerrainWaterErosion;

        if (!weTerrain.gameObject)
        {
            return;
        }
        Terrain terComponent = (Terrain)weTerrain.GetComponent(typeof(Terrain));

        if (terComponent == null)
        {
            NonTerrainMessage();
            return;
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(weTerrain);
        }
        GUI.changed = false;

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Iterations");
        weTerrain.waterErosionIterations = (int)EditorGUILayout.Slider(weTerrain.waterErosionIterations, 1, 250);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Rainfall");
        weTerrain.waterErosionRainfall = EditorGUILayout.Slider(weTerrain.waterErosionRainfall, 0, 10);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Stream Turbulence");
        weTerrain.waterErosionConeThreshold = EditorGUILayout.Slider(weTerrain.waterErosionConeThreshold, 1, 5);
        EditorGUILayout.EndHorizontal();

        Rect buttonRect = EditorGUILayout.BeginHorizontal();

        buttonRect.x      = buttonRect.width / 2 - 100;
        buttonRect.width  = 200;
        buttonRect.height = 28;
        if (GUI.Button(buttonRect, "Apply Water Erosion"))
        {
            // Undo
            Terrain ter = (Terrain)weTerrain.GetComponent(typeof(Terrain));
            if (ter == null)
            {
                return;
            }
            TerrainData terData = ter.terrainData;
            //Undo.RecordObject (terData, "Terrain Water Erosion");
            Undo.RegisterUndo(terData, "Terrain Water Erosion");
            // Start time...
            DateTime startTime = DateTime.Now;
            TerrainWaterErosion.ErosionProgressDelegate erosionProgressDelegate = new TerrainWaterErosion.ErosionProgressDelegate(updateErosionProgress);
            weTerrain.processTerrain(erosionProgressDelegate);
            EditorUtility.ClearProgressBar();
            TimeSpan processTime = DateTime.Now - startTime;
            Debug.Log("Process complete in: " + processTime.ToString());
            GUIUtility.ExitGUI();
        }
        EditorGUILayout.EndHorizontal();
        for (int i = 0; i < 6; i++)
        {
            EditorGUILayout.Separator();
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(weTerrain);
        }
    }
    public override void OnInspectorGUI()
    {
        EditorGUIUtility.LookLikeControls ();
        TerrainWaterErosion weTerrain = (TerrainWaterErosion)target as TerrainWaterErosion;
        if (!weTerrain.gameObject) {
            return;
        }
        Terrain terComponent = (Terrain)weTerrain.GetComponent (typeof(Terrain));
        if (terComponent == null) {
            NonTerrainMessage ();
            return;
        }

        if (GUI.changed) {
            EditorUtility.SetDirty (weTerrain);
        }
        GUI.changed = false;

        EditorGUILayout.BeginHorizontal ();
        EditorGUILayout.PrefixLabel ("Iterations");
        weTerrain.waterErosionIterations = (int)EditorGUILayout.Slider (weTerrain.waterErosionIterations, 1, 250);
        EditorGUILayout.EndHorizontal ();

        EditorGUILayout.BeginHorizontal ();
        EditorGUILayout.PrefixLabel ("Rainfall");
        weTerrain.waterErosionRainfall = EditorGUILayout.Slider (weTerrain.waterErosionRainfall, 0, 10);
        EditorGUILayout.EndHorizontal ();

        EditorGUILayout.BeginHorizontal ();
        EditorGUILayout.PrefixLabel ("Stream Turbulence");
        weTerrain.waterErosionConeThreshold = EditorGUILayout.Slider (weTerrain.waterErosionConeThreshold, 1, 5);
        EditorGUILayout.EndHorizontal ();

        Rect buttonRect = EditorGUILayout.BeginHorizontal ();
        buttonRect.x = buttonRect.width / 2 - 100;
        buttonRect.width = 200;
        buttonRect.height = 28;
        if (GUI.Button (buttonRect, "Apply Water Erosion")) {
            // Undo
            Terrain ter = (Terrain)weTerrain.GetComponent (typeof(Terrain));
            if (ter == null) {
                return;
            }
            TerrainData terData = ter.terrainData;
            //Undo.RecordObject (terData, "Terrain Water Erosion");
            Undo.RegisterUndo(terData, "Terrain Water Erosion");
            // Start time...
            DateTime startTime = DateTime.Now;
            TerrainWaterErosion.ErosionProgressDelegate erosionProgressDelegate = new TerrainWaterErosion.ErosionProgressDelegate (updateErosionProgress);
            weTerrain.processTerrain (erosionProgressDelegate);
            EditorUtility.ClearProgressBar ();
            TimeSpan processTime = DateTime.Now - startTime;
            Debug.Log ("Process complete in: " + processTime.ToString ());
            GUIUtility.ExitGUI ();
        }
        EditorGUILayout.EndHorizontal ();
        for (int i = 0; i < 6; i++)
            EditorGUILayout.Separator ();

        if (GUI.changed) {
            EditorUtility.SetDirty (weTerrain);
        }
    }