Skip to content

Commit 3710f0f

Browse files
committed
implement rng in place of u32 seeds
Closes #197
1 parent aab9e56 commit 3710f0f

File tree

16 files changed

+174
-138
lines changed

16 files changed

+174
-138
lines changed

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
//! # Example
44
//!
55
//! ```rust
6-
//! use noise::{NoiseFn, Perlin, Seedable};
6+
//! use noise::{NoiseFn, Perlin, Seedable, DEFAULT_SEED};
77
//!
8-
//! let perlin = Perlin::new(1);
8+
//! let perlin = Perlin::new(DEFAULT_SEED);
99
//! let val = perlin.get([42.4, 37.7, 2.8]);
1010
//! ```
1111

src/noise_fns.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,14 @@ where
5050
/// Trait for functions that require a seed before generating their values
5151
pub trait Seedable {
5252
/// Set the seed for the function implementing the `Seedable` trait
53-
fn set_seed(self, seed: u32) -> Self;
53+
fn set_seed(self, seed: Seed) -> Self;
5454

5555
/// Getter to retrieve the seed from the function
56-
fn seed(&self) -> u32;
56+
fn seed(&self) -> Seed;
5757
}
58+
59+
pub type Seed = [u8; 16];
60+
61+
pub const DEFAULT_SEED: Seed = [
62+
0x4f, 0x09, 0xd6, 0x9f, 0x62, 0x9b, 0x09, 0x0c, 0x0c, 0x49, 0x09, 0xfe, 0x6f, 0x1d, 0x4a, 0x38,
63+
];

src/noise_fns/generators/fractals.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ mod fbm;
77
mod hybridmulti;
88
mod ridgedmulti;
99

10-
use crate::Seedable;
10+
use crate::{Seed, Seedable};
1111

1212
/// Trait for `MultiFractal` functions
1313
pub trait MultiFractal {
@@ -20,14 +20,16 @@ pub trait MultiFractal {
2020
fn set_persistence(self, persistence: f64) -> Self;
2121
}
2222

23-
fn build_sources<Source>(seed: u32, octaves: usize) -> Vec<Source>
23+
fn build_sources<Source>(seed: Seed, octaves: usize) -> Vec<Source>
2424
where
2525
Source: Default + Seedable,
2626
{
2727
let mut sources = Vec::with_capacity(octaves);
2828
for x in 0..octaves {
2929
let source = Source::default();
30-
sources.push(source.set_seed(seed + x as u32));
30+
let mut seed = seed;
31+
seed[0] = seed[0] + x as u8;
32+
sources.push(source.set_seed(seed));
3133
}
3234
sources
3335
}

src/noise_fns/generators/fractals/basicmulti.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
math::vectors::*,
3-
noise_fns::{MultiFractal, NoiseFn, Seedable},
3+
noise_fns::{MultiFractal, NoiseFn, Seedable, DEFAULT_SEED}, Seed,
44
};
55
use alloc::vec::Vec;
66

@@ -44,7 +44,8 @@ pub struct BasicMulti<T> {
4444
/// persistence produces "rougher" noise.
4545
pub persistence: f64,
4646

47-
seed: u32,
47+
seed: Seed,
48+
4849
sources: Vec<T>,
4950
scale_factor: f64,
5051
}
@@ -53,14 +54,13 @@ impl<T> BasicMulti<T>
5354
where
5455
T: Default + Seedable,
5556
{
56-
pub const DEFAULT_SEED: u32 = 0;
5757
pub const DEFAULT_OCTAVES: usize = 6;
5858
pub const DEFAULT_FREQUENCY: f64 = 2.0;
5959
pub const DEFAULT_LACUNARITY: f64 = core::f64::consts::PI * 2.0 / 3.0;
6060
pub const DEFAULT_PERSISTENCE: f64 = 0.5;
6161
pub const MAX_OCTAVES: usize = 32;
6262

63-
pub fn new(seed: u32) -> Self {
63+
pub fn new(seed: Seed) -> Self {
6464
Self {
6565
seed,
6666
octaves: Self::DEFAULT_OCTAVES,
@@ -92,7 +92,7 @@ where
9292
T: Default + Seedable,
9393
{
9494
fn default() -> Self {
95-
Self::new(Self::DEFAULT_SEED)
95+
Self::new(DEFAULT_SEED)
9696
}
9797
}
9898

@@ -135,7 +135,7 @@ impl<T> Seedable for BasicMulti<T>
135135
where
136136
T: Default + Seedable,
137137
{
138-
fn set_seed(self, seed: u32) -> Self {
138+
fn set_seed(self, seed: Seed) -> Self {
139139
if self.seed == seed {
140140
return self;
141141
}
@@ -147,7 +147,7 @@ where
147147
}
148148
}
149149

150-
fn seed(&self) -> u32 {
150+
fn seed(&self) -> Seed {
151151
self.seed
152152
}
153153
}

src/noise_fns/generators/fractals/billow.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
math::{scale_shift, vectors::*},
3-
noise_fns::{MultiFractal, NoiseFn, Seedable},
3+
noise_fns::{MultiFractal, NoiseFn, Seedable, DEFAULT_SEED}, Seed,
44
};
55
use alloc::vec::Vec;
66

@@ -41,7 +41,8 @@ pub struct Billow<T> {
4141
/// persistence produces "rougher" noise.
4242
pub persistence: f64,
4343

44-
seed: u32,
44+
seed: Seed,
45+
4546
sources: Vec<T>,
4647
scale_factor: f64,
4748
}
@@ -50,14 +51,13 @@ impl<T> Billow<T>
5051
where
5152
T: Default + Seedable,
5253
{
53-
pub const DEFAULT_SEED: u32 = 0;
5454
pub const DEFAULT_OCTAVE_COUNT: usize = 6;
5555
pub const DEFAULT_FREQUENCY: f64 = 1.0;
5656
pub const DEFAULT_LACUNARITY: f64 = core::f64::consts::PI * 2.0 / 3.0;
5757
pub const DEFAULT_PERSISTENCE: f64 = 0.5;
5858
pub const MAX_OCTAVES: usize = 32;
5959

60-
pub fn new(seed: u32) -> Self {
60+
pub fn new(seed: Seed) -> Self {
6161
Self {
6262
seed,
6363
octaves: Self::DEFAULT_OCTAVE_COUNT,
@@ -88,7 +88,7 @@ where
8888
T: Default + Seedable,
8989
{
9090
fn default() -> Self {
91-
Self::new(Self::DEFAULT_SEED)
91+
Self::new(DEFAULT_SEED)
9292
}
9393
}
9494

@@ -131,7 +131,7 @@ impl<T> Seedable for Billow<T>
131131
where
132132
T: Default + Seedable,
133133
{
134-
fn set_seed(self, seed: u32) -> Self {
134+
fn set_seed(self, seed: Seed) -> Self {
135135
if self.seed == seed {
136136
return self;
137137
}
@@ -143,7 +143,7 @@ where
143143
}
144144
}
145145

146-
fn seed(&self) -> u32 {
146+
fn seed(&self) -> Seed {
147147
self.seed
148148
}
149149
}

src/noise_fns/generators/fractals/fbm.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
math::vectors::*,
3-
noise_fns::{MultiFractal, NoiseFn, Seedable},
3+
noise_fns::{MultiFractal, NoiseFn, Seedable, DEFAULT_SEED}, Seed,
44
};
55
use alloc::vec::Vec;
66

@@ -50,7 +50,7 @@ pub struct Fbm<T> {
5050
/// persistence produces "rougher" noise.
5151
pub persistence: f64,
5252

53-
seed: u32,
53+
seed: Seed,
5454
sources: Vec<T>,
5555
scale_factor: f64,
5656
}
@@ -59,14 +59,13 @@ impl<T> Fbm<T>
5959
where
6060
T: Default + Seedable,
6161
{
62-
pub const DEFAULT_SEED: u32 = 0;
6362
pub const DEFAULT_OCTAVE_COUNT: usize = 6;
6463
pub const DEFAULT_FREQUENCY: f64 = 1.0;
6564
pub const DEFAULT_LACUNARITY: f64 = core::f64::consts::PI * 2.0 / 3.0;
6665
pub const DEFAULT_PERSISTENCE: f64 = 0.5;
6766
pub const MAX_OCTAVES: usize = 32;
6867

69-
pub fn new(seed: u32) -> Self {
68+
pub fn new(seed: Seed) -> Self {
7069
Self {
7170
seed,
7271
octaves: Self::DEFAULT_OCTAVE_COUNT,
@@ -97,7 +96,7 @@ where
9796
T: Default + Seedable,
9897
{
9998
fn default() -> Self {
100-
Self::new(Self::DEFAULT_SEED)
99+
Self::new(DEFAULT_SEED)
101100
}
102101
}
103102

@@ -140,7 +139,7 @@ impl<T> Seedable for Fbm<T>
140139
where
141140
T: Default + Seedable,
142141
{
143-
fn set_seed(self, seed: u32) -> Self {
142+
fn set_seed(self, seed: Seed) -> Self {
144143
if self.seed == seed {
145144
return self;
146145
}
@@ -152,7 +151,7 @@ where
152151
}
153152
}
154153

155-
fn seed(&self) -> u32 {
154+
fn seed(&self) -> Seed {
156155
self.seed
157156
}
158157
}

src/noise_fns/generators/fractals/hybridmulti.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
math::vectors::*,
3-
noise_fns::{MultiFractal, NoiseFn, Seedable},
3+
noise_fns::{MultiFractal, NoiseFn, Seedable, DEFAULT_SEED}, Seed,
44
};
55
use alloc::vec::Vec;
66

@@ -38,7 +38,7 @@ pub struct HybridMulti<T> {
3838
/// persistence produces "rougher" noise.
3939
pub persistence: f64,
4040

41-
seed: u32,
41+
seed: Seed,
4242
sources: Vec<T>,
4343
scale_factor: f64,
4444
}
@@ -47,14 +47,13 @@ impl<T> HybridMulti<T>
4747
where
4848
T: Default + Seedable,
4949
{
50-
pub const DEFAULT_SEED: u32 = 0;
5150
pub const DEFAULT_OCTAVES: usize = 6;
5251
pub const DEFAULT_FREQUENCY: f64 = 2.0;
5352
pub const DEFAULT_LACUNARITY: f64 = core::f64::consts::PI * 2.0 / 3.0;
5453
pub const DEFAULT_PERSISTENCE: f64 = 0.25;
5554
pub const MAX_OCTAVES: usize = 32;
5655

57-
pub fn new(seed: u32) -> Self {
56+
pub fn new(seed: Seed) -> Self {
5857
Self {
5958
seed,
6059
octaves: Self::DEFAULT_OCTAVES,
@@ -100,7 +99,7 @@ where
10099
T: Default + Seedable,
101100
{
102101
fn default() -> Self {
103-
Self::new(Self::DEFAULT_SEED)
102+
Self::new(DEFAULT_SEED)
104103
}
105104
}
106105

@@ -143,7 +142,7 @@ impl<T> Seedable for HybridMulti<T>
143142
where
144143
T: Default + Seedable,
145144
{
146-
fn set_seed(self, seed: u32) -> Self {
145+
fn set_seed(self, seed: Seed) -> Self {
147146
if self.seed == seed {
148147
return self;
149148
}
@@ -155,7 +154,7 @@ where
155154
}
156155
}
157156

158-
fn seed(&self) -> u32 {
157+
fn seed(&self) -> Seed {
159158
self.seed
160159
}
161160
}

src/noise_fns/generators/fractals/ridgedmulti.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::{
22
math::vectors::*,
3-
noise_fns::{MultiFractal, NoiseFn, Seedable},
3+
noise_fns::{MultiFractal, NoiseFn, Seedable, DEFAULT_SEED},
4+
Seed,
45
};
56
use alloc::vec::Vec;
67

@@ -56,7 +57,8 @@ pub struct RidgedMulti<T> {
5657
/// half the height of the previous.
5758
pub attenuation: f64,
5859

59-
seed: u32,
60+
seed: Seed,
61+
6062
sources: Vec<T>,
6163
scale_factor: f64,
6264
}
@@ -65,15 +67,14 @@ impl<T> RidgedMulti<T>
6567
where
6668
T: Default + Seedable,
6769
{
68-
pub const DEFAULT_SEED: u32 = 0;
6970
pub const DEFAULT_OCTAVE_COUNT: usize = 6;
7071
pub const DEFAULT_FREQUENCY: f64 = 1.0;
7172
pub const DEFAULT_LACUNARITY: f64 = core::f64::consts::PI * 2.0 / 3.0;
7273
pub const DEFAULT_PERSISTENCE: f64 = 1.0;
7374
pub const DEFAULT_ATTENUATION: f64 = 2.0;
7475
pub const MAX_OCTAVES: usize = 32;
7576

76-
pub fn new(seed: u32) -> Self {
77+
pub fn new(seed: Seed) -> Self {
7778
Self {
7879
seed,
7980
octaves: Self::DEFAULT_OCTAVE_COUNT,
@@ -130,7 +131,7 @@ where
130131
T: Default + Seedable,
131132
{
132133
fn default() -> Self {
133-
Self::new(Self::DEFAULT_SEED)
134+
Self::new(DEFAULT_SEED)
134135
}
135136
}
136137

@@ -173,7 +174,7 @@ impl<T> Seedable for RidgedMulti<T>
173174
where
174175
T: Default + Seedable,
175176
{
176-
fn set_seed(self, seed: u32) -> Self {
177+
fn set_seed(self, seed: Seed) -> Self {
177178
if self.seed == seed {
178179
return self;
179180
}
@@ -185,7 +186,7 @@ where
185186
}
186187
}
187188

188-
fn seed(&self) -> u32 {
189+
fn seed(&self) -> Seed {
189190
self.seed
190191
}
191192
}

0 commit comments

Comments
 (0)