public void GenerateTerrain(Terrain curTerrain, TerrainArchetype Terrain) { LibNoise.Perlin Temp = new LibNoise.Perlin(); noiseCombine = Temp; noiseCombine = GenerateNoise(Terrain, noiseCombine); // Procedural Generate a terrain heightmap and apply it to a terrain on a gameobject TerrainData tdata = Terrain.C_Terrain.terrainData; tdata.heightmapResolution = Terrain.C_tResolution * Terrain.C_tResolution; int xRes = tdata.heightmapWidth; int yRes = tdata.heightmapHeight; GameObject terrainObj = curTerrain.gameObject; tdata.size = new Vector3(xRes * Terrain.C_tScale, Terrain.C_tHeight * Terrain.C_tScale, yRes * Terrain.C_tScale); float[,] tHeights = tdata.GetHeights(0, 0, xRes, yRes); int fillx; int filly; int Startx = System.Convert.ToInt32(Terrain.C_Axes.x); int Startz = System.Convert.ToInt32(Terrain.C_Axes.y); for (int x = Startx; x < (xRes + Startx); x++) { for (int z = Startz; z < (yRes + Startz); z++) { // Set up fill numbers to compensate for negative shifts. fillx = x - Startx; filly = z - Startz; double Value = noiseCombine.GetValue(x, z, 0); if (Value < 0) { double tempvalue = (Value * -1); tHeights[fillx, filly] = System.Convert.ToSingle(tempvalue); } } } if (Terrain.C_tMaterial != null) { SplatPrototype[] splatData = new SplatPrototype[1]; splatData[0] = new SplatPrototype(); splatData[0].texture = Terrain.C_tMaterial; splatData[0].tileOffset = new Vector2(0, 0); splatData[0].tileSize = new Vector2(15, 15); tdata.splatPrototypes = splatData; } curTerrain.terrainData = tdata; curTerrain.gameObject.GetComponent <TerrainCollider>().terrainData = tdata; curTerrain.terrainData.SetHeights(0, 0, tHeights); terrainObj.transform.position = new Vector3(Terrain.C_Axes.x, 0, Terrain.C_Axes.y); Terrain.C_TerrainObj = PrefabUtility.CreatePrefab("Assets/TerrainGenerator/Resources/Archetypes/" + Terrain.C_Name + "/Terrain.prefab", terrainObj); }
public LibNoise.IModule GenerateNoise(TerrainArchetype curTerrain, LibNoise.IModule noiseCombine) { LibNoise.Perlin Temp = new LibNoise.Perlin(); tempnoise = Temp; noise = Temp; noise1 = Temp; noise2 = Temp; noiseCombine = Temp; // Apply Noise Values for (int i = 0; i < curTerrain.C_nNoiseList.Length; i++) { switch (curTerrain.C_nNoiseList[i]) { case SetNoise.Perlin: LibNoise.Perlin perlin = new LibNoise.Perlin(); perlin.Frequency = curTerrain.C_nFrequency; perlin.Lacunarity = curTerrain.C_nLacunarity; perlin.NoiseQuality = curTerrain.C_nQuality; perlin.OctaveCount = curTerrain.C_nOctaves; perlin.Persistence = curTerrain.C_nPersistence; perlin.Seed = curTerrain.C_nSeed; tempnoise = perlin; break; case SetNoise.Billow: LibNoise.Billow billow = new LibNoise.Billow(); billow.Frequency = curTerrain.C_nFrequency; billow.Lacunarity = curTerrain.C_nLacunarity; billow.NoiseQuality = curTerrain.C_nQuality; billow.OctaveCount = curTerrain.C_nOctaves; billow.Persistence = curTerrain.C_nPersistence; billow.Seed = curTerrain.C_nSeed; tempnoise = billow; break; case SetNoise.MultiFractal: LibNoise.RidgedMultifractal MultiFrac = new LibNoise.RidgedMultifractal(); MultiFrac.Frequency = curTerrain.C_nFrequency; MultiFrac.Lacunarity = curTerrain.C_nLacunarity; MultiFrac.NoiseQuality = curTerrain.C_nQuality; MultiFrac.OctaveCount = curTerrain.C_nOctaves; //MultiFrac.Persistence = Persistence; MultiFrac.Seed = curTerrain.C_nSeed; tempnoise = MultiFrac; break; } switch (i) { case 0: noise = tempnoise; break; case 1: noise1 = tempnoise; break; case 2: noise2 = tempnoise; break; } } //selector = new LibNoise.Modifiers.Select(noise,noise1,noise2); LibNoise.IModule tempNoise1 = new LibNoise.Modifiers.Add(noise, noise1); LibNoise.IModule tempNoise2 = new LibNoise.Modifiers.Add(tempNoise1, noise2); noiseCombine = tempNoise2; return(noiseCombine); }