Archived
Private
Public Access
1
0
This repository has been archived on 2026-02-04. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
ProjectBackup/Unity/Landmass Generation/Assets/Scripts/Utils/MapGenerator.cs
2022-11-12 13:10:03 +01:00

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
}
}