Ejemplo n.º 1
0
    /// Returns the array of presets of the specified generator method.
    public static e2dPreset[] GetCurvePresets(e2dGeneratorCurveMethod method)
    {
        if (sCurvePresets == null)
        {
            sCurvePresets = new e2dPreset[(int)e2dGeneratorCurveMethod.NUM_METHODS][];

            sCurvePresets[(int)e2dGeneratorCurveMethod.PERLIN] = new e2dPreset[]
            {
                new e2dCurvePerlinPreset()
                {
                    name = "Rolling Hills",
                    octaves = 3,
                    frequencyPerUnit = 0.02f,
                    persistence = 0.3f
                } ,
                new e2dCurvePerlinPreset()
                {
                    name = "Jagged Plains",
                    octaves = 11,
                    frequencyPerUnit = 0.001f,
                    persistence = 0.51f
                },
                new e2dCurvePerlinPreset()
                {
                    name = "Spiky Mountains",
                    octaves = 2,
                    frequencyPerUnit = 0.117f,
                    persistence = 0.155f
                },
            };

            sCurvePresets[(int)e2dGeneratorCurveMethod.VORONOI] = new e2dPreset[]
            {
                new e2dCurveVoronoiPreset()
                {
                    name = "Rolling Hills",
                    frequencyPerUnit = 0.025f,
                    peakRatio = 0.755f,
                    peakWidth = 0.210f,
                    peakType = e2dVoronoiPeakType.SINE
                },
                new e2dCurveVoronoiPreset()
                {
                    name = "Highland Plateaus",
                    frequencyPerUnit = 0.012f,
                    peakRatio = 0.664f,
                    peakWidth = 0.210f,
                    peakType = e2dVoronoiPeakType.QUADRATIC
                },
                new e2dCurveVoronoiPreset()
                {
                    name = "Scattered Mountains",
                    frequencyPerUnit = 0.037f,
                    peakRatio = 0.237f,
                    peakWidth = 0.210f,
                    peakType = e2dVoronoiPeakType.SINE
                },
            };

            sCurvePresets[(int)e2dGeneratorCurveMethod.MIDPOINT] = new e2dPreset[]
            {
                new e2dCurveMidpointPreset()
                {
                    name = "Spiky Hills",
                    frequencyPerUnit = 0.025f,
                    roughness = 0.082f
                },
                new e2dCurveMidpointPreset()
                {
                    name = "Jagged Plains",
                    frequencyPerUnit = 0.001f,
                    roughness = 0.709f
                },
                new e2dCurveMidpointPreset()
                {
                    name = "Jagged Mountains",
                    frequencyPerUnit = 0.084f,
                    roughness = 0.327f
                },
            };

            sCurvePresets[(int)e2dGeneratorCurveMethod.WALK] = new e2dPreset[]
            {
                new e2dCurveWalkPreset()
                {
                    name = "Rolling Hills",
                    frequencyPerUnit = 0.5f,
                    angleChangePerUnit = 56,
                    cohesionPerUnit = 0.855f
                },
                new e2dCurveWalkPreset()
                {
                    name = "Large Plains",
                    frequencyPerUnit = 0.269f,
                    angleChangePerUnit = 39,
                    cohesionPerUnit = 2
                },
            };
        }

        return sCurvePresets[(int)method];
    }
Ejemplo n.º 2
0
 /// Returns the default preset for the given method. This preset will be used when the component is first created.
 public static e2dPreset GetDefault(e2dGeneratorCurveMethod method)
 {
     return GetCurvePresets(method)[0].Clone();
 }
Ejemplo n.º 3
0
 public static e2dPreset[] GetCurvePresets(e2dGeneratorCurveMethod method)
 {
     if (e2dPresets.sCurvePresets == null)
     {
         e2dPresets.sCurvePresets    = new e2dPreset[5][];
         e2dPresets.sCurvePresets[0] = new e2dPreset[]
         {
             new e2dCurvePerlinPreset
             {
                 name             = "Rolling Hills",
                 octaves          = 3,
                 frequencyPerUnit = 0.02f,
                 persistence      = 0.3f
             },
             new e2dCurvePerlinPreset
             {
                 name             = "Jagged Plains",
                 octaves          = 11,
                 frequencyPerUnit = 0.001f,
                 persistence      = 0.51f
             },
             new e2dCurvePerlinPreset
             {
                 name             = "Spiky Mountains",
                 octaves          = 2,
                 frequencyPerUnit = 0.117f,
                 persistence      = 0.155f
             }
         };
         e2dPresets.sCurvePresets[2] = new e2dPreset[]
         {
             new e2dCurveVoronoiPreset
             {
                 name             = "Rolling Hills",
                 frequencyPerUnit = 0.025f,
                 peakRatio        = 0.755f,
                 peakWidth        = 0.21f,
                 peakType         = e2dVoronoiPeakType.SINE
             },
             new e2dCurveVoronoiPreset
             {
                 name             = "Highland Plateaus",
                 frequencyPerUnit = 0.012f,
                 peakRatio        = 0.664f,
                 peakWidth        = 0.21f,
                 peakType         = e2dVoronoiPeakType.QUADRATIC
             },
             new e2dCurveVoronoiPreset
             {
                 name             = "Scattered Mountains",
                 frequencyPerUnit = 0.037f,
                 peakRatio        = 0.237f,
                 peakWidth        = 0.21f,
                 peakType         = e2dVoronoiPeakType.SINE
             }
         };
         e2dPresets.sCurvePresets[1] = new e2dPreset[]
         {
             new e2dCurveMidpointPreset
             {
                 name             = "Spiky Hills",
                 frequencyPerUnit = 0.025f,
                 roughness        = 0.082f
             },
             new e2dCurveMidpointPreset
             {
                 name             = "Jagged Plains",
                 frequencyPerUnit = 0.001f,
                 roughness        = 0.709f
             },
             new e2dCurveMidpointPreset
             {
                 name             = "Jagged Mountains",
                 frequencyPerUnit = 0.084f,
                 roughness        = 0.327f
             }
         };
         e2dPresets.sCurvePresets[3] = new e2dPreset[]
         {
             new e2dCurveWalkPreset
             {
                 name               = "Rolling Hills",
                 frequencyPerUnit   = 0.5f,
                 angleChangePerUnit = 56f,
                 cohesionPerUnit    = 0.855f
             },
             new e2dCurveWalkPreset
             {
                 name               = "Large Plains",
                 frequencyPerUnit   = 0.269f,
                 angleChangePerUnit = 39f,
                 cohesionPerUnit    = 2f
             }
         };
     }
     return(e2dPresets.sCurvePresets[(int)method]);
 }
Ejemplo n.º 4
0
 public static e2dPreset GetDefault(e2dGeneratorCurveMethod method)
 {
     return(e2dPresets.GetCurvePresets(method)[0].Clone());
 }
Ejemplo n.º 5
0
    /// Tool for generating the terrain curve.
    private void DrawCurveTool()
    {
        GUILayout.Label(e2dStrings.LABEL_TOOL_SETTINGS, e2dStyles.Header);

        // global settings
        Generator.FullRebuild = EditorGUILayout.Toggle(e2dStrings.LABEL_REBUILD_ALL, Generator.FullRebuild);
        Generator.NodeStepSize = Mathf.Max(e2dConstants.GENERATOR_STEP_NODE_SIZE_MIN, EditorGUILayout.FloatField(e2dStrings.LABEL_STEP_SIZE, Generator.NodeStepSize));

        // generator methods
        GUI.changed = false;
        string[] toolOptions = e2dStrings.GENERATOR_CURVE_TOOLS;
        mCurveTool = (e2dGeneratorCurveMethod)GUILayout.Toolbar((int)mCurveTool, toolOptions, e2dStyles.TabButton, GUILayout.ExpandWidth(false));
        if (GUI.changed)
        {
            mPreset = -1;
            SceneView.RepaintAll();
        }

        // tab
        EditorGUILayout.BeginVertical(e2dStyles.TabBox);

        // blending
        if (mCurveTool != e2dGeneratorCurveMethod.PEAKS)
        {
            Generator.CurveBlendingWeights[(int)mCurveTool] = EditorGUILayout.Slider(e2dStrings.LABEL_BLEND_WEIGHT, Generator.CurveBlendingWeights[(int)mCurveTool], 0, 1);
        }

        // presets
        if (mCurveTool != e2dGeneratorCurveMethod.PEAKS)
        {
            GUI.changed = false;
            e2dPreset[] presets = e2dPresets.GetCurvePresets(mCurveTool);
            string[] presetNames = new string[presets.Length + 1];
            presetNames[0] = e2dStrings.LABEL_NO_PRESET;
            for (int i = 0; i < presets.Length; i++) presetNames[i + 1] = presets[i].name;
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel(e2dStrings.LABEL_PRESET);
            mPreset = EditorGUILayout.Popup(mPreset + 1, presetNames) - 1;
            EditorGUILayout.EndHorizontal();
            if (GUI.changed && mPreset >= 0)
            {
                presets[mPreset].UpdateValues(Generator);
            }
        }

        // parameters
        DrawCurveParameters();

        // tab end
        EditorGUILayout.EndVertical();

        // generate button
        if (GUILayout.Button(e2dStrings.BUTTON_GENERATE, GUILayout.ExpandWidth(false)))
        {
            Undo.RegisterUndo(Terrain, e2dStrings.UNDO_GENERATE);
            Generator.GenerateCurve(ref mDebugHeightmap);
            EditorUtility.SetDirty(Generator);
        }
    }
    /// Returns the array of presets of the specified generator method.
    public static e2dPreset[] GetCurvePresets(e2dGeneratorCurveMethod method)
    {
        if (sCurvePresets == null)
        {
            sCurvePresets = new e2dPreset[(int)e2dGeneratorCurveMethod.NUM_METHODS][];

            sCurvePresets[(int)e2dGeneratorCurveMethod.PERLIN] = new e2dPreset[]
            {
                new e2dCurvePerlinPreset()
                {
                    name             = "Rolling Hills",
                    octaves          = 3,
                    frequencyPerUnit = 0.02f,
                    persistence      = 0.3f
                },
                new e2dCurvePerlinPreset()
                {
                    name             = "Jagged Plains",
                    octaves          = 11,
                    frequencyPerUnit = 0.001f,
                    persistence      = 0.51f
                },
                new e2dCurvePerlinPreset()
                {
                    name             = "Spiky Mountains",
                    octaves          = 2,
                    frequencyPerUnit = 0.117f,
                    persistence      = 0.155f
                },
            };

            sCurvePresets[(int)e2dGeneratorCurveMethod.VORONOI] = new e2dPreset[]
            {
                new e2dCurveVoronoiPreset()
                {
                    name             = "Rolling Hills",
                    frequencyPerUnit = 0.025f,
                    peakRatio        = 0.755f,
                    peakWidth        = 0.210f,
                    peakType         = e2dVoronoiPeakType.SINE
                },
                new e2dCurveVoronoiPreset()
                {
                    name             = "Highland Plateaus",
                    frequencyPerUnit = 0.012f,
                    peakRatio        = 0.664f,
                    peakWidth        = 0.210f,
                    peakType         = e2dVoronoiPeakType.QUADRATIC
                },
                new e2dCurveVoronoiPreset()
                {
                    name             = "Scattered Mountains",
                    frequencyPerUnit = 0.037f,
                    peakRatio        = 0.237f,
                    peakWidth        = 0.210f,
                    peakType         = e2dVoronoiPeakType.SINE
                },
            };

            sCurvePresets[(int)e2dGeneratorCurveMethod.MIDPOINT] = new e2dPreset[]
            {
                new e2dCurveMidpointPreset()
                {
                    name             = "Spiky Hills",
                    frequencyPerUnit = 0.025f,
                    roughness        = 0.082f
                },
                new e2dCurveMidpointPreset()
                {
                    name             = "Jagged Plains",
                    frequencyPerUnit = 0.001f,
                    roughness        = 0.709f
                },
                new e2dCurveMidpointPreset()
                {
                    name             = "Jagged Mountains",
                    frequencyPerUnit = 0.084f,
                    roughness        = 0.327f
                },
            };

            sCurvePresets[(int)e2dGeneratorCurveMethod.WALK] = new e2dPreset[]
            {
                new e2dCurveWalkPreset()
                {
                    name               = "Rolling Hills",
                    frequencyPerUnit   = 0.5f,
                    angleChangePerUnit = 56,
                    cohesionPerUnit    = 0.855f
                },
                new e2dCurveWalkPreset()
                {
                    name               = "Large Plains",
                    frequencyPerUnit   = 0.269f,
                    angleChangePerUnit = 39,
                    cohesionPerUnit    = 2
                },
            };
        }

        return(sCurvePresets[(int)method]);
    }
Ejemplo n.º 7
0
    /// Tool for generating the terrain curve.
    private void DrawCurveTool()
    {
        GUILayout.Label(e2dStrings.LABEL_TOOL_SETTINGS, e2dStyles.Header);

        // global settings
        Generator.FullRebuild  = EditorGUILayout.Toggle(e2dStrings.LABEL_REBUILD_ALL, Generator.FullRebuild);
        Generator.NodeStepSize = Mathf.Max(e2dConstants.GENERATOR_STEP_NODE_SIZE_MIN, EditorGUILayout.FloatField(e2dStrings.LABEL_STEP_SIZE, Generator.NodeStepSize));

        // generator methods
        GUI.changed = false;
        string[] toolOptions = e2dStrings.GENERATOR_CURVE_TOOLS;
        mCurveTool = (e2dGeneratorCurveMethod)GUILayout.Toolbar((int)mCurveTool, toolOptions, e2dStyles.TabButton, GUILayout.ExpandWidth(false));
        if (GUI.changed)
        {
            mPreset = -1;
            SceneView.RepaintAll();
        }

        // tab
        EditorGUILayout.BeginVertical(e2dStyles.TabBox);

        // blending
        if (mCurveTool != e2dGeneratorCurveMethod.PEAKS)
        {
            Generator.CurveBlendingWeights[(int)mCurveTool] = EditorGUILayout.Slider(e2dStrings.LABEL_BLEND_WEIGHT, Generator.CurveBlendingWeights[(int)mCurveTool], 0, 1);
        }

        // presets
        if (mCurveTool != e2dGeneratorCurveMethod.PEAKS)
        {
            GUI.changed = false;
            e2dPreset[] presets     = e2dPresets.GetCurvePresets(mCurveTool);
            string[]    presetNames = new string[presets.Length + 1];
            presetNames[0] = e2dStrings.LABEL_NO_PRESET;
            for (int i = 0; i < presets.Length; i++)
            {
                presetNames[i + 1] = presets[i].name;
            }
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel(e2dStrings.LABEL_PRESET);
            mPreset = EditorGUILayout.Popup(mPreset + 1, presetNames) - 1;
            EditorGUILayout.EndHorizontal();
            if (GUI.changed && mPreset >= 0)
            {
                presets[mPreset].UpdateValues(Generator);
            }
        }

        // parameters
        DrawCurveParameters();

        // tab end
        EditorGUILayout.EndVertical();

        // generate button
        if (GUILayout.Button(e2dStrings.BUTTON_GENERATE, GUILayout.ExpandWidth(false)))
        {
            Undo.RegisterUndo(Terrain, e2dStrings.UNDO_GENERATE);
            Generator.GenerateCurve(ref mDebugHeightmap);
            EditorUtility.SetDirty(Generator);
        }
    }