void GenerateTile() { // generate a new height map float[,] heightMap = NoiseGenerator.GenerateNoiseMap(noiseSampleSize, scale, waves, offset); float[,] hdHeigthMap = NoiseGenerator.GenerateNoiseMap(noiseSampleSize - 1, scale, waves, offset, textureResolution); Vector3[] verts = tileMeshFilter.mesh.vertices; for (int x = 0; x < noiseSampleSize; x++) { for (int z = 0; z < noiseSampleSize; z++) { int index = (x * noiseSampleSize) + z; verts[index].y = heightCurve.Evaluate(heightMap[x, z]) * maxHeight; } } tileMeshFilter.mesh.vertices = verts; tileMeshFilter.mesh.RecalculateBounds(); tileMeshFilter.mesh.RecalculateNormals(); tileMeshCollider.sharedMesh = tileMeshFilter.mesh; float[,] heatMap = GenerateHeatMap(heightMap); float[,] moistureMap = GenerateMoistureMap(heightMap); TerrainType[,] heatTerrainTypeMap = TextureBuilder.CreateTerrainTypeMap(heatMap, heatTerrainTypes); TerrainType[,] moistureTerrainTypeMap = TextureBuilder.CreateTerrainTypeMap(moistureMap, moistureTerrainTypes); switch (visualizationType) { case TerrainVisualization.Height: tileMeshRenderer.material.mainTexture = TextureBuilder.BuildTexture(hdHeigthMap, heightTerrainTypes); break; case TerrainVisualization.Heat: tileMeshRenderer.material.mainTexture = TextureBuilder.BuildTexture(heatMap, heatTerrainTypes); break; case TerrainVisualization.Moisture: tileMeshRenderer.material.mainTexture = TextureBuilder.BuildTexture(moistureMap, moistureTerrainTypes); break; case TerrainVisualization.Biome: tileMeshRenderer.material.mainTexture = BiomeBuilder.instance.BuildTexture(heatTerrainTypeMap, moistureTerrainTypeMap); break; } CreateDataMap(heatTerrainTypeMap, moistureTerrainTypeMap); TreeSpawner.instance.Spawn(dataMap); }