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; } } }