void AssignMaterials(ThreeTierCave cave, Material floorMat, Material wallMat, Material ceilingMat)
 {
     foreach (var floor in cave.GetFloors())
     {
         floor.Material = floorMat;
     }
     foreach (var wall in cave.GetWalls())
     {
         wall.Material = wallMat;
     }
     foreach (var ceiling in cave.GetCeilings())
     {
         ceiling.Material = ceilingMat;
     }
 }
    public override GameObject Generate()
    {
        Map map = config.MapGenerator.Generate();

        IHeightMap     floor     = config.FloorHeightMapModule.GetHeightMap();
        IHeightMap     ceiling   = config.CeilingHeightMapModule.GetHeightMap();
        CaveWallModule caveWalls = config.WallModule;

        Map[,] mapChunks         = MapSplitter.Subdivide(map);
        CaveMeshes[,] caveChunks = GenerateCaveChunks(mapChunks, config.CaveType, config.Scale, floor, ceiling, caveWalls);
        ThreeTierCave cave = new ThreeTierCave(caveChunks);

        AssignMaterials(cave, config.FloorMaterial, config.WallMaterial, config.CeilingMaterial);

        return(cave.GameObject);
    }