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