public VoxelChunk GenerateChunk(VoxelChunk chunk, VoxelWorld world) { var chunkPos = chunk.WorldPosition * VoxelWorld.Configuration.ChunkSegmentSize; for (int x = 0; x < VoxelWorld.Configuration.ChunkSegmentSize; x++) { for (int z = 0; z < VoxelWorld.Configuration.ChunkSegmentSize; z++) { var worldPos = chunkPos + new Int2(x, z); var turbX = TurbX.GetValue(worldPos.X / 48f, worldPos.Y / 48f) * 12f; var turbY = TurbY.GetValue(worldPos.X / 48f, worldPos.Y / 48f) * 12f; var worldPosTurb = new Vector2(worldPos.X + turbX, worldPos.Y + turbY); var alt_base = GetInterpolated(worldPos, (cb) => cb.AltBase); var chaos = GetInterpolated(worldPos, (cb) => cb.Chaos); var temp = GetInterpolated(worldPos, (cb) => cb.Temp); var humidity = GetInterpolated(worldPos, (cb) => cb.Humidity); var rockiness = GetInterpolated(worldPos, (cb) => cb.Rockiness); var river = 0; var riverless_alt = GetInterpolated(worldPos, (cb) => cb.Alt) + Mathf.Abs(Small.GetValue(worldPosTurb.X / 150f, worldPosTurb.Y / 150f)) * Mathf.Max(chaos, 0.025f) * 64f + Mathf.Abs(Small.GetValue(worldPosTurb.X / 450f, worldPosTurb.Y / 450f)) * (1f - chaos) * (1f - humidity) * 94f; var chunkBase = GetChunkBase(worldPos); var is_cliffs = chunkBase.IsCliffs; var near_cliffs = chunkBase.NearCliffs; var alt = riverless_alt - (Mathf.Cos((1 - river) * Mathf.Pi) + 1) * 0.5f * 24f; while (alt > 0) { alt--; chunk.SetBlock(x, (int)alt, z, new Block { Color = Color32.White, IsTransparent = false, Id = 0 }, false, false); } } } world.UpdateQueue.Enqueue(new ReMeshChunk(chunk)); world.UpdateQueue.Enqueue(new ReMeshChunk(chunkPos + new Int2(0, -1))); world.UpdateQueue.Enqueue(new ReMeshChunk(chunkPos + new Int2(0, 1))); world.UpdateQueue.Enqueue(new ReMeshChunk(chunkPos + new Int2(-1, 0))); world.UpdateQueue.Enqueue(new ReMeshChunk(chunkPos + new Int2(1, 0))); return(chunk); }
public override double Execute(double x, double y, double z, CallableNode flow) { return(noise.GetValue(x * frequency, z * frequency) * scale); }