private IEnumerator GenerateMapProcedurally()
    {
        // Disable mouse Input while map is generating
        runtimeBuilder.DisableMouseInputForBuild();

        int x     = 0;
        int xSize = 80;
        int z     = 0;
        int zSize = 80;

        uteRuntimeBuilder.Tile tile;

        for (int i = 0; i < xSize * zSize; i++)
        {
            // Get Tile from Category by Tile Name
            tile = runtimeBuilder.GetTileFromCategoryByName(mCraftCategory.name, "water");

            // Pass Tile mainObject to RuntimeBuilder
            runtimeBuilder.SetCurrentTileInstantly(tile.mainObject);

            // Place Tile at Vector3 position
            runtimeBuilder.PlaceCurrentTileAtPosition(new Vector3(x - 25f, 0, z - 25f));

            if (x > 10 && x < xSize - 10 && z > 10 && z < zSize - 10)
            {
                tile = runtimeBuilder.GetTileFromCategoryByName(mCraftCategory.name, "grass");
                runtimeBuilder.SetCurrentTileInstantly(tile.mainObject);
                runtimeBuilder.PlaceCurrentTileAtPosition(new Vector3(x - 25f, 1, z - 25f));

                if (Random.Range(0, 10) == 0)
                {
                    for (int j = 0; j < Random.Range(4, 10); j++)
                    {
                        tile = runtimeBuilder.GetTileFromCategoryByName(mCraftCategory.name, "stone");
                        runtimeBuilder.SetCurrentTileInstantly(tile.mainObject);
                        runtimeBuilder.PlaceCurrentTileAtPosition(new Vector3(x - 25f, 2 + j, z - 25f));
                    }
                }
                else if (Random.Range(0, 10) == 0)
                {
                    for (int k = 0; k < Random.Range(2, 5); k++)
                    {
                        tile = runtimeBuilder.GetTileFromCategoryByName(mCraftCategory.name, "dirt");
                        runtimeBuilder.SetCurrentTileInstantly(tile.mainObject);
                        runtimeBuilder.PlaceCurrentTileAtPosition(new Vector3(x - 25f, 2 + k, z - 25f));
                    }
                }
            }

            x++;
            if (x == xSize)
            {
                yield return(0);

                x = 0;
                z++;
            }
        }

        // Enable mouse Input
        runtimeBuilder.EnableMouseInputForBuild();
        runtimeBuilder.CancelCurrentTile();
    }