|
|
@@ -2,6 +2,10 @@ using UnityEngine;
|
|
|
|
|
|
public class MapGenerator : MonoBehaviour
|
|
|
{
|
|
|
+
|
|
|
+ public enum DrawMode { NoiseMap, ColourMap};
|
|
|
+ public DrawMode drawMode;
|
|
|
+
|
|
|
public int mapWidth;
|
|
|
public int mapHeight;
|
|
|
public float noiseScale;
|
|
|
@@ -17,12 +21,38 @@ public class MapGenerator : MonoBehaviour
|
|
|
|
|
|
public bool autoUpdate;
|
|
|
|
|
|
+ public TerrainType[] regions;
|
|
|
+
|
|
|
public void GenerateMap()
|
|
|
{
|
|
|
float[,] noiseMap = Noise.GenerateNoiseMap(mapWidth, mapHeight, seed, noiseScale, octaves, persistance, lacunarity, offset);
|
|
|
|
|
|
+ Color[] colourMap = new Color[mapWidth * mapHeight];
|
|
|
+
|
|
|
+ for(int y=0; y<mapHeight; y++)
|
|
|
+ {
|
|
|
+ for (int x=0; x<mapWidth; x++)
|
|
|
+ {
|
|
|
+ float currentHeight = noiseMap[x, y];
|
|
|
+ for (int i = 0; i < regions.Length; i++)
|
|
|
+ {
|
|
|
+ if(currentHeight <= regions[i].height)
|
|
|
+ {
|
|
|
+ colourMap[y*mapWidth + x] = regions[i].colour;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
MapDisplay display = FindFirstObjectByType<MapDisplay>();
|
|
|
- display.DrawNoiseMap(noiseMap);
|
|
|
+ if(drawMode == DrawMode.NoiseMap)
|
|
|
+ {
|
|
|
+ display.DrawTexture(TextureGenerator.TextureFromHeightMap(noiseMap));
|
|
|
+ } else if (drawMode == DrawMode.ColourMap)
|
|
|
+ {
|
|
|
+ display.DrawTexture(TextureGenerator.TextureFromColourMap(colourMap, mapWidth, mapHeight));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void OnValidate()
|
|
|
@@ -47,3 +77,11 @@ public class MapGenerator : MonoBehaviour
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+[System.Serializable]
|
|
|
+public struct TerrainType
|
|
|
+{
|
|
|
+ public string name;
|
|
|
+ public float height;
|
|
|
+ public Color colour;
|
|
|
+}
|