MapGenerator.cs 1.8 KB

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