1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use crate::prelude::Random;
use std::sync::Arc;
#[derive(Clone)]
pub struct Noise {
probability: f64,
range: (f64, f64),
random: Arc<dyn Random + Send + Sync>,
}
impl Noise {
pub fn new(probability: f64, range: (f64, f64), random: Arc<dyn Random + Send + Sync>) -> Self {
Self { probability, range, random }
}
pub fn generate(&self, value: f64) -> f64 {
if self.random.is_hit(self.probability) {
value * self.random.uniform_real(self.range.0, self.range.1)
} else {
value
}
}
}