using UnityEngine; public class MapGenerator : MonoBehaviour { public enum DrawMode { NoiseMap, ColourMap, Mesh}; public DrawMode drawMode; public const int mapChunkSize = 241; [Range(0,6)] public int levelOfDetail; public float noiseScale; public int octaves; [Range(0,1)] public float persistance; public float lacunarity; public int seed; public Vector2 offset; public float MeshHeightMultiplier; public AnimationCurve meshHeightCurve; public bool autoUpdate; public TerrainType[] regions; public void GenerateMap() { float[,] noiseMap = Noise.GenerateNoiseMap(mapChunkSize, mapChunkSize, seed, noiseScale, octaves, persistance, lacunarity, offset); Color[] colourMap = new Color[mapChunkSize * mapChunkSize]; for(int y=0; y(); if(drawMode == DrawMode.NoiseMap) { display.DrawTexture(TextureGenerator.TextureFromHeightMap(noiseMap)); } else if (drawMode == DrawMode.ColourMap) { display.DrawTexture(TextureGenerator.TextureFromColourMap(colourMap, mapChunkSize, mapChunkSize)); }else if(drawMode == DrawMode.Mesh) { display.DrawMesh(MeshGenerator.GenerateTerrainMesh(noiseMap, MeshHeightMultiplier, meshHeightCurve, levelOfDetail), TextureGenerator.TextureFromColourMap(colourMap, mapChunkSize, mapChunkSize)); } } private void OnValidate() { if (lacunarity < 1) { lacunarity = 1; } if(octaves < 0) { octaves = 0; } } } [System.Serializable] public struct TerrainType { public string name; public float height; public Color colour; }