MapGenerator.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using UnityEngine;
  2. using System.Collections;
  3. public class MapGenerator : MonoBehaviour {
  4. public MapDisplay display;
  5. public enum DrawMode {NoiseMap, ColourMap, Mesh};
  6. public DrawMode drawMode;
  7. const int mapChunkSize = 241;
  8. [Range(0,6)]
  9. public int levelOfDetail;
  10. public float noiseScale;
  11. public int octaves;
  12. [Range(0,1)]
  13. public float persistance;
  14. public float lacunarity;
  15. public int seed;
  16. public Vector2 offset;
  17. public float meshHeightMultiplier;
  18. public AnimationCurve meshHeightCurve;
  19. public bool autoUpdate;
  20. public TerrainType[] regions;
  21. void Start()
  22. {
  23. noiseScale = Random.Range(15, 30);
  24. octaves = Random.Range(1, 10);
  25. persistance = Random.Range(0.2f, 0.6f);
  26. lacunarity = Random.Range(1, 3);
  27. seed = Random.Range(-1000, 1000);
  28. GenerateMap();
  29. }
  30. public void GenerateMap() {
  31. float[,] noiseMap = Noise.GenerateNoiseMap (mapChunkSize, mapChunkSize, seed, noiseScale, octaves, persistance, lacunarity, offset);
  32. Color[] colourMap = new Color[mapChunkSize * mapChunkSize];
  33. for (int y = 0; y < mapChunkSize; y++) {
  34. for (int x = 0; x < mapChunkSize; x++) {
  35. float currentHeight = noiseMap [x, y];
  36. for (int i = 0; i < regions.Length; i++) {
  37. if (currentHeight <= regions [i].height) {
  38. colourMap [y * mapChunkSize + x] = regions [i].colour;
  39. break;
  40. }
  41. }
  42. }
  43. }
  44. var texture = TextureGenerator.TextureFromColourMap(colourMap, mapChunkSize, mapChunkSize);
  45. var meshData = MeshGenerator.GenerateTerrainMesh(noiseMap, meshHeightMultiplier, meshHeightCurve, levelOfDetail);
  46. display.DrawMesh(meshData, texture);
  47. }
  48. void OnValidate() {
  49. if (lacunarity < 1) {
  50. lacunarity = 1;
  51. }
  52. if (octaves < 0) {
  53. octaves = 0;
  54. }
  55. if (autoUpdate)
  56. {
  57. GenerateMap();
  58. }
  59. }
  60. }
  61. [System.Serializable]
  62. public struct TerrainType {
  63. public string name;
  64. public float height;
  65. public Color colour;
  66. }