public struct LayeredNoise { public typealias Scalar = Generator.Scalar public let octaves: Int public let frequency: Scalar public let amplitude: Scalar private let _generators: [Generator] init(octaves: Int, frequency: Scalar, amplitude: Scalar) { self.octaves = octaves self.frequency = frequency self.amplitude = amplitude self._generators = Array(repeating: .init(), count: octaves) } } public extension LayeredNoise where Generator: CoherentNoiseRandomInit { init(random: inout Random, octaves: Int, frequency: Scalar, amplitude: Scalar) { self.octaves = octaves self.frequency = frequency self.amplitude = amplitude self._generators = Array(repeating: Generator(random: &random), count: octaves) } } public extension LayeredNoise where Generator: CoherentNoise2D { func get(_ point: SIMD2) -> Scalar { zip(self._generators, 0..) -> Scalar { zip(self._generators, 0..) -> Scalar { zip(self._generators, 0..