74 lines
2.4 KiB
C#
74 lines
2.4 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace Utils {
|
|
public class MapGenerator : MonoBehaviour {
|
|
public DrawMode drawMode;
|
|
|
|
public const int ChunkSize = 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(ChunkSize, ChunkSize, seed, noiseScale, octaves, persistance, lacunarity, offset);
|
|
|
|
Color[] colorMap = new Color[ChunkSize * ChunkSize];
|
|
for (int y = 0; y < ChunkSize; y++)
|
|
for (int x = 0; x < ChunkSize; x++) {
|
|
float currentHeight = noiseMap[x, y];
|
|
for (var i = 0; i < regions.Length; i++) {
|
|
if (currentHeight <= regions[i].height) {
|
|
colorMap[y * ChunkSize + x] = regions[i].color;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
MapDisplay display = FindObjectOfType<MapDisplay>();
|
|
switch (drawMode) {
|
|
case DrawMode.NoiseMap:
|
|
display.DrawTexture(TextureGenerator.TextureFromHeightMap(noiseMap));
|
|
break;
|
|
|
|
case DrawMode.ColorMap:
|
|
display.DrawTexture(TextureGenerator.TextureFromColorMap(colorMap, ChunkSize, ChunkSize));
|
|
break;
|
|
|
|
case DrawMode.Mesh:
|
|
display.DrawMesh(MeshGenerator.GenerateTerrainMesh(noiseMap, meshHeightMultiplier, meshHeightCurve, levelOfDetail), TextureGenerator.TextureFromColorMap(colorMap, ChunkSize, ChunkSize));
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void OnValidate() {
|
|
lacunarity = Mathf.Clamp(lacunarity, 1, 100000);
|
|
octaves = Mathf.Clamp(octaves, 1, 100000);
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
public struct TerrainType {
|
|
public string name;
|
|
public float height;
|
|
public Color color;
|
|
}
|
|
|
|
public enum DrawMode {
|
|
NoiseMap,
|
|
ColorMap,
|
|
Mesh
|
|
}
|
|
} |