noise_functions/base/
cell_distance.rs1use 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#[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 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 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 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 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}