struct StandardWorldGenerator: WorldGenerator { private var heightNoise: LayeredNoiseAlt>! private var terrainNoise: LayeredNoise>! private var colorNoise: LayeredNoise>! public mutating func reset(seed: UInt64) { var random: any RandomProvider let initialState = SplitMix64.createState(seed: seed) #if true random = Xoroshiro128PlusPlus(state: initialState) #else random = PCG32Random(seed: initialState) #endif self.heightNoise = .init(random: &random, octaves: 200, frequency: 0.0002, amplitude: 2) self.terrainNoise = .init(random: &random, octaves: 10, frequency: 0.01, amplitude: 0.337) self.colorNoise = .init(random: &random, octaves: 150, frequency: 0.00366, amplitude: 2) } public func makeChunk(id chunkID: SIMD3) -> Chunk { let chunkOrigin = chunkID &<< Chunk.shift var chunk = Chunk(position: chunkOrigin) for z in 0..(chunkOrigin.xz &+ SIMD2(x, z))) for y in 0..(chunkOrigin &+ ipos) let height = fpos.y / 64.0 + height let value = height + self.terrainNoise.get(fpos) let block: BlockType = if value < 0 { .solid(.init( hue: Float(180 + self.colorNoise.get(fpos) * 180), saturation: 0.7, value: 0.9).linear) } else { .air } chunk.setBlock(internal: ipos, type: block) } } } return chunk } }