noise_functions/base/
cell_distance.rs

1use crate::{base::impl_noise, from_fast_noise_lite::cell_distance_euclidean_squared, math::sqrt};
2
3#[cfg(feature = "nightly-simd")]
4use core::simd::{f32x2, f32x4};
5
6use super::CustomCellDistance;
7
8/// 2/3/4 dimensional noise of the distance to the closest cell.
9#[derive(Debug, Clone, Copy, PartialEq)]
10pub struct CellDistance {
11    pub jitter: f32,
12}
13
14impl CellDistance {
15    pub const fn jitter(mut self, jitter: f32) -> Self {
16        self.jitter = jitter;
17        self
18    }
19}
20
21impl_noise!(234 CellDistance);
22
23impl Default for CellDistance {
24    fn default() -> Self {
25        Self { jitter: 1.0 }
26    }
27}
28
29impl CellDistance {
30    #[inline]
31    fn gen2(self, point: [f32; 2], seed: i32) -> f32 {
32        // implementation from FastNoiseLite
33        sqrt(cell_distance_euclidean_squared::gen2(self.jitter, point, seed)) * 2.0 - 1.0
34    }
35
36    #[inline]
37    fn gen3(self, point: [f32; 3], seed: i32) -> f32 {
38        // implementation from FastNoiseLite
39        sqrt(cell_distance_euclidean_squared::gen3(self.jitter, point, seed)) * 2.0 - 1.0
40    }
41
42    #[inline]
43    fn gen4(self, point: [f32; 4], seed: i32) -> f32 {
44        CustomCellDistance::default().jitter(self.jitter).gen4(point, seed) * 2.0 - 1.0
45    }
46
47    #[inline]
48    #[cfg(feature = "nightly-simd")]
49    fn gen2a(self, point: f32x2, seed: i32) -> f32 {
50        // implementation from FastNoiseLite
51        sqrt(cell_distance_euclidean_squared::gen2a(self.jitter, point, seed)) * 2.0 - 1.0
52    }
53
54    #[inline]
55    #[cfg(feature = "nightly-simd")]
56    fn gen3a(self, point: f32x4, seed: i32) -> f32 {
57        // implementation from FastNoiseLite
58        sqrt(cell_distance_euclidean_squared::gen3a(self.jitter, point, seed)) * 2.0 - 1.0
59    }
60
61    #[inline]
62    #[cfg(feature = "nightly-simd")]
63    fn gen4a(self, point: f32x4, seed: i32) -> f32 {
64        CustomCellDistance::default().jitter(self.jitter).gen4a(point, seed) * 2.0 - 1.0
65    }
66}