public async void TransitionsAsync() { OverworldGenerator og = new OverworldGenerator(); OverworldTerrain noiseGen = new OverworldTerrain(true); await Task.Run(() => { var map = new NoiseMap(); PlaneNoiseMapBuilder builder = new PlaneNoiseMapBuilder() { DestNoiseMap = map, SourceModule = noiseGen.transitions }; var image = new Image(); var transitionsRenderer = new ImageRenderer() { SourceNoiseMap = map, DestinationImage = image }; transitionsRenderer.BuildGrayscaleGradient(); builder.SetBounds(-400, 400, -300, 300); builder.SetDestSize(800, 600); builder.Build(); transitionsRenderer.Render(); var bmp = transitionsRenderer.DestinationImage.ToGdiBitmap(); bmp.Save("_transitions.bmp"); Assert.Equal(0, 0); }); }
public OverworldGenerator(string seed) : base("overworld") { // If the seed provided is numeric, just use it. // Naam asked me to do this a long time ago and I // bet he thought that I forgot - Jonpro03 if (!int.TryParse(seed, out int seedHash)) { seedHash = BitConverter.ToInt32(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(seed))); } OverworldTerrainSettings generatorSettings = new OverworldTerrainSettings(); generatorSettings.Seed = seedHash; terrainGen = new OverworldTerrain(generatorSettings); }
public static void Decorate(Chunk chunk, double[,] terrainHeightMap, OverworldTerrain ot, World world) { var noise = new TerrainNoise(ot.settings); for (int x = 0; x < 16; x++) { for (int z = 0; z < 16; z++) { var b = ChunkBiome.GetBiome((chunk.X << 4) + x, (chunk.Z << 4) + z, ot); var blockPos = new Vector(x, (int)terrainHeightMap[x, z], z); IDecorator decorator = DecoratorFactory.GetDecorator(b, chunk, blockPos, noise); decorator.Decorate(); GenerateTrees(world, blockPos + (chunk.X << 4, 0, chunk.Z << 4), decorator.Features, noise); } } }
public static void CarveCaves(OverworldTerrain noiseGen, Chunk chunk, double[,] thm, double[,] bhm) { Block block = caveAir; int chunkOffsetX = chunk.X * 16; int chunkOffsetZ = chunk.Z * 16; for (int bx = 0; bx < 16; bx++) { for (int bz = 0; bz < 16; bz++) { int tY = (int)++thm[bx, bz]; int brY = (int)bhm[bx, bz]; for (int by = brY; by < tY; by++) { bool isCave = noiseGen.IsCave(bx + chunkOffsetX, by, bz + chunkOffsetZ); if (isCave) { chunk.SetBlock(bx, by, bz, block); } } } } }
public async void SameAsync() { OverworldTerrainSettings generatorSettings = new OverworldTerrainSettings(); generatorSettings.Seed = 137; OverworldTerrain noiseGen = new OverworldTerrain(generatorSettings, true); var map = new NoiseMap(); PlaneNoiseMapBuilder builder = new PlaneNoiseMapBuilder() { DestNoiseMap = map, SourceModule = noiseGen.Result }; var image = new SharpNoise.Utilities.Imaging.Image(); var renderer = new ImageRenderer() { SourceNoiseMap = map, DestinationImage = image }; //renderer.BuildGrayscaleGradient(); renderer.BuildTerrainGradient(); builder.SetBounds(-2024, 2024, -2024, 2024); builder.SetDestSize(1024, 1024); builder.Build(); renderer.Render(); var bmp = renderer.DestinationImage.ToGdiBitmap(); bmp.Save("terrain.bmp"); Assert.Equal(0, 0); }
public async void TerrainBlendAsync() { OverworldGenerator og = new OverworldGenerator(); OverworldTerrain noiseGen = new OverworldTerrain(true); await Task.Run(() => { var noise = new SharpNoise.Modules.ScaleBias() { Scale = 4, Source0 = noiseGen.selectiveBlend }; var map = new NoiseMap(); PlaneNoiseMapBuilder builder = new PlaneNoiseMapBuilder() { DestNoiseMap = map, SourceModule = noise }; var image = new Image(); var transitionsRenderer = new ImageRenderer() { SourceNoiseMap = map, DestinationImage = image }; transitionsRenderer.BuildTerrainGradient(); builder.SetBounds(-400, 400, -300, 300); builder.SetDestSize(800, 600); builder.Build(); transitionsRenderer.Render(); var bmp = transitionsRenderer.DestinationImage.ToGdiBitmap(); bmp.Save("_blendedterrain.bmp"); Assert.Equal(0, 0); }); }
public static Biomes GetBiome(int worldX, int worldZ, OverworldTerrain noiseGen) { BaseBiome bn = noiseGen.GetBiome(worldX, worldZ); return (Biomes)bn; }