noise_functions/modifiers/
translate_xyz.rs1use core::ops::IndexMut;
2
3use crate::{Noise, Sample};
4
5pub struct TranslateXyz<Noise, X, Y, Z> {
7 pub noise: Noise,
8 pub x: X,
9 pub y: Y,
10 pub z: Z,
11}
12
13impl<N, X, Y, Z> Noise for TranslateXyz<N, X, Y, Z> {}
14
15impl<const DIM: usize, Point, N, X, Y, Z> Sample<DIM, Point> for TranslateXyz<N, X, Y, Z>
16where
17 Point: IndexMut<usize, Output = f32> + Copy,
18 N: Sample<DIM, Point>,
19 X: Sample<DIM, Point>,
20 Y: Sample<DIM, Point>,
21 Z: Sample<DIM, Point>,
22{
23 fn sample_with_seed(&self, point: Point, seed: i32) -> f32 {
24 let mut translated = point;
25
26 if DIM > 0 {
27 translated[0] += self.x.sample_with_seed(point, seed);
28 }
29
30 if DIM > 1 {
31 translated[1] += self.y.sample_with_seed(point, seed);
32 }
33
34 if DIM > 2 {
35 translated[2] += self.z.sample_with_seed(point, seed);
36 }
37
38 self.noise.sample_with_seed(translated, seed)
39 }
40}