private void OnSceneGUI()
    {
        terrain         = target as SplineTerrainGenerator;
        handleTransform = terrain.transform;
        handleRotation  = Tools.pivotRotation == PivotRotation.Local ?
                          handleTransform.rotation : Quaternion.identity;

        Vector3 p0 = ShowPoint(0);

        for (int i = 1; i < terrain.ControlPointCount; i += 3)
        {
            Vector3 p1 = ShowPoint(i);
            Vector3 p2 = ShowPoint(i + 1);
            Vector3 p3 = ShowPoint(i + 2);

            // Draw handle lines
            Handles.color = Color.gray;
            Handles.DrawLine(p0, p1);
            Handles.DrawLine(p2, p3);

            // Draw spline
            Handles.DrawBezier(p0, p3, p1, p2, Color.white, null, 2f);
            p0 = p3;
        }
    }
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        terrain = target as SplineTerrainGenerator;

        // If we've selected a spline control point, show its transform in the inspector
        if (selectedIndex >= 0 && selectedIndex < terrain.ControlPointCount)
        {
            DrawSelectedPointInspector();
        }

        // Button to generate new terrain
        if (GUILayout.Button("Generate New Terrain"))
        {
            Undo.RecordObject(terrain, "Generate New Terrain");
            terrain.BuildSpline();
            EditorUtility.SetDirty(terrain);
        }

        // Button to generate new terrain
        if (GUILayout.Button("Add Curve"))
        {
            Undo.RecordObject(terrain, "Add Curve");
            terrain.AddCurve(4);
            terrain.terrainBlocks += 1;
            terrain.BuildMesh();
            EditorUtility.SetDirty(terrain);
        }

        // Button to rebuild the mesh
        if (GUILayout.Button("Build Mesh & Collider"))
        {
            Undo.RecordObject(terrain, "Build Mesh & Collider");
            terrain.BuildMesh();
            terrain.GenerateCollider();
            EditorUtility.SetDirty(terrain);
        }
    }