better world gen
This commit is contained in:
87
Worldgen.cs
Normal file
87
Worldgen.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Voxel
|
||||
{
|
||||
public static class Worldgen
|
||||
{
|
||||
private static int baseHeight = 32;
|
||||
|
||||
private static float res1 = 2;
|
||||
private static float res2 = 4;
|
||||
private static float amplitude1 = 4;
|
||||
private static float amplitude2 = 2;
|
||||
|
||||
private static float mountainMapRes = (float)1/2;
|
||||
private static float mountainMapAmplitude = 8;
|
||||
|
||||
private static float elevationMapRes = (float)1/8;
|
||||
private static float elevationMapAmplitude = 32;
|
||||
|
||||
private static FastNoiseLite noise = new FastNoiseLite();
|
||||
private static Random random = new Random();
|
||||
|
||||
public static int GetHeight(int x, int z)
|
||||
{
|
||||
float map1 = noise.GetNoise(
|
||||
x * res1,
|
||||
z * res1
|
||||
) * amplitude1;
|
||||
|
||||
float map2 = noise.GetNoise(x * res2,
|
||||
z * res2
|
||||
) * amplitude2;
|
||||
|
||||
float mountainMap = noise.GetNoise(
|
||||
x * mountainMapRes,
|
||||
z * mountainMapRes
|
||||
) * mountainMapAmplitude;
|
||||
|
||||
float elevationMap = (noise.GetNoise(
|
||||
x * elevationMapRes,
|
||||
z * elevationMapRes
|
||||
) + 0.25f) * elevationMapAmplitude;
|
||||
return baseHeight + (int)(elevationMap + ((map1 + map2) * 1 + mountainMap));
|
||||
}
|
||||
|
||||
public static Blocks GetBlock(int y, int maxY)
|
||||
{
|
||||
if (y > maxY)
|
||||
{
|
||||
return Blocks.Air;
|
||||
}
|
||||
|
||||
if (y == maxY)
|
||||
{
|
||||
if (y < baseHeight)
|
||||
return Blocks.Sand;
|
||||
else
|
||||
return Blocks.Grass;
|
||||
}
|
||||
|
||||
if (y < 4)
|
||||
{
|
||||
if (y == 0) return Blocks.Bedrock;
|
||||
|
||||
float randomValue = random.NextSingle();
|
||||
|
||||
if (randomValue < (1f / y))
|
||||
{
|
||||
return Blocks.Bedrock;
|
||||
}
|
||||
|
||||
return Blocks.Stone;
|
||||
}
|
||||
|
||||
if (y > maxY - 6)
|
||||
{
|
||||
return Blocks.Dirt;
|
||||
}
|
||||
|
||||
return Blocks.Stone;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user