public struct LayeredNoise { public typealias Scalar = Generator.Scalar public let octaves: Int public let frequency: Scalar public let amplitude: Scalar private let _generators: [Generator] private let _amplitudeAdjusted: Scalar } public extension LayeredNoise where Generator: CoherentNoiseRandomInit { init(random: inout Random, octaves: Int, frequency: Scalar, amplitude: Scalar = 1) { self.octaves = octaves self.frequency = frequency self.amplitude = amplitude self._generators = (0..) -> Scalar { zip(self._generators[1...], 1..) -> Scalar { zip(self._generators[1...], 1..) -> Scalar { zip(self._generators[1...], 1.. { public typealias Scalar = Generator.Scalar public let octaves: Int public let frequency: Scalar public let amplitude: Scalar private let _generator: Generator private let _amplitudeAdjusted: Scalar } public extension LayeredNoiseAlt where Generator: CoherentNoiseRandomInit { init(random: inout Random, octaves: Int, frequency: Scalar, amplitude: Scalar = 1) { self.octaves = octaves self.frequency = frequency self.amplitude = amplitude self._generator = Generator(random: &random) self._amplitudeAdjusted = amplitude / 2 } } public extension LayeredNoiseAlt where Generator: CoherentNoise3D & CoherentNoise2D { func get(_ point: SIMD2) -> Scalar { let layerOffset: Int = 1 return (1..) -> Scalar { let layerOffset: Int = 1 return (1..