void GenerateMap()
    {
        var startTime = DateTime.Now;

        points = BlueNoiseGenerator.PoissonDiscSampling(rMin, rMax, 30, mapSize);
        List <Vertex> scaffolding = BlueNoiseGenerator.Scaffolding(mapSize);

        points.AddRange(scaffolding);

        var duration = DateTime.Now - startTime;

        Debug.Log("SeedPoints Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        List <Triangle> convexPoly = Triangulation.TriangulateConvexPolygon(scaffolding);

        triangles = Triangulation.TriangleSplittingAlgorithm(points, convexPoly);
        //triangles = Triangulation.IncrementalAlgorithm(points);

        duration = DateTime.Now - startTime;
        Debug.Log("Triangulation Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        triangles = DelaunayTriangulation.MakeTriangulationDelaunay(triangles);

        duration = DateTime.Now - startTime;
        Debug.Log("Delaunayification Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        triangles = DelaunayTriangulation.FillInNeighbours(triangles);

        duration = DateTime.Now - startTime;
        Debug.Log("Neighbours Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        // fill heightmap into y coordinates
        points = HeightField.PerlinIsland(points, mapSize, 0.1f, 0.7f, 4f, 3f, 6);

        duration = DateTime.Now - startTime;
        Debug.Log("Heightmap Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        triangles = Voronoi.GenerateCentroids(triangles, points);

        duration = DateTime.Now - startTime;
        Debug.Log("Centroids Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        cells = CellMeshCreator.SpawnMeshes(points, cell);

        duration = DateTime.Now - startTime;
        Debug.Log("Meshes Done in " + duration.TotalSeconds + "s");

        var camHeight = mapSize * 0.5f / Mathf.Tan(Camera.main.fieldOfView * 0.5f * Mathf.Deg2Rad);

        Camera.main.transform.position = new Vector3(mapSize / 2, camHeight * 1.1f, mapSize / 2);

        //DebugDraw();
    }