Skip to content

Commit 89cd382

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

File tree

16 files changed

+177
-134
lines changed

16 files changed

+177
-134
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: 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

@@ -44,7 +45,8 @@ pub struct BasicMulti<T> {
4445
/// persistence produces "rougher" noise.
4546
pub persistence: f64,
4647

47-
seed: u32,
48+
seed: Seed,
49+
4850
sources: Vec<T>,
4951
scale_factor: f64,
5052
}
@@ -53,14 +55,13 @@ impl<T> BasicMulti<T>
5355
where
5456
T: Default + Seedable,
5557
{
56-
pub const DEFAULT_SEED: u32 = 0;
5758
pub const DEFAULT_OCTAVES: usize = 6;
5859
pub const DEFAULT_FREQUENCY: f64 = 2.0;
5960
pub const DEFAULT_LACUNARITY: f64 = core::f64::consts::PI * 2.0 / 3.0;
6061
pub const DEFAULT_PERSISTENCE: f64 = 0.5;
6162
pub const MAX_OCTAVES: usize = 32;
6263

63-
pub fn new(seed: u32) -> Self {
64+
pub fn new(seed: Seed) -> Self {
6465
Self {
6566
seed,
6667
octaves: Self::DEFAULT_OCTAVES,
@@ -92,7 +93,7 @@ where
9293
T: Default + Seedable,
9394
{
9495
fn default() -> Self {
95-
Self::new(Self::DEFAULT_SEED)
96+
Self::new(DEFAULT_SEED)
9697
}
9798
}
9899

@@ -135,7 +136,7 @@ impl<T> Seedable for BasicMulti<T>
135136
where
136137
T: Default + Seedable,
137138
{
138-
fn set_seed(self, seed: u32) -> Self {
139+
fn set_seed(self, seed: Seed) -> Self {
139140
if self.seed == seed {
140141
return self;
141142
}
@@ -147,7 +148,7 @@ where
147148
}
148149
}
149150

150-
fn seed(&self) -> u32 {
151+
fn seed(&self) -> Seed {
151152
self.seed
152153
}
153154
}

src/noise_fns/generators/fractals/billow.rs

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

@@ -41,7 +42,8 @@ pub struct Billow<T> {
4142
/// persistence produces "rougher" noise.
4243
pub persistence: f64,
4344

44-
seed: u32,
45+
seed: Seed,
46+
4547
sources: Vec<T>,
4648
scale_factor: f64,
4749
}
@@ -50,14 +52,13 @@ impl<T> Billow<T>
5052
where
5153
T: Default + Seedable,
5254
{
53-
pub const DEFAULT_SEED: u32 = 0;
5455
pub const DEFAULT_OCTAVE_COUNT: usize = 6;
5556
pub const DEFAULT_FREQUENCY: f64 = 1.0;
5657
pub const DEFAULT_LACUNARITY: f64 = core::f64::consts::PI * 2.0 / 3.0;
5758
pub const DEFAULT_PERSISTENCE: f64 = 0.5;
5859
pub const MAX_OCTAVES: usize = 32;
5960

60-
pub fn new(seed: u32) -> Self {
61+
pub fn new(seed: Seed) -> Self {
6162
Self {
6263
seed,
6364
octaves: Self::DEFAULT_OCTAVE_COUNT,
@@ -88,7 +89,7 @@ where
8889
T: Default + Seedable,
8990
{
9091
fn default() -> Self {
91-
Self::new(Self::DEFAULT_SEED)
92+
Self::new(DEFAULT_SEED)
9293
}
9394
}
9495

@@ -131,7 +132,7 @@ impl<T> Seedable for Billow<T>
131132
where
132133
T: Default + Seedable,
133134
{
134-
fn set_seed(self, seed: u32) -> Self {
135+
fn set_seed(self, seed: Seed) -> Self {
135136
if self.seed == seed {
136137
return self;
137138
}
@@ -143,7 +144,7 @@ where
143144
}
144145
}
145146

146-
fn seed(&self) -> u32 {
147+
fn seed(&self) -> Seed {
147148
self.seed
148149
}
149150
}

src/noise_fns/generators/fractals/fbm.rs

Lines changed: 7 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

@@ -50,7 +51,7 @@ pub struct Fbm<T> {
5051
/// persistence produces "rougher" noise.
5152
pub persistence: f64,
5253

53-
seed: u32,
54+
seed: Seed,
5455
sources: Vec<T>,
5556
scale_factor: f64,
5657
}
@@ -59,14 +60,13 @@ impl<T> Fbm<T>
5960
where
6061
T: Default + Seedable,
6162
{
62-
pub const DEFAULT_SEED: u32 = 0;
6363
pub const DEFAULT_OCTAVE_COUNT: usize = 6;
6464
pub const DEFAULT_FREQUENCY: f64 = 1.0;
6565
pub const DEFAULT_LACUNARITY: f64 = core::f64::consts::PI * 2.0 / 3.0;
6666
pub const DEFAULT_PERSISTENCE: f64 = 0.5;
6767
pub const MAX_OCTAVES: usize = 32;
6868

69-
pub fn new(seed: u32) -> Self {
69+
pub fn new(seed: Seed) -> Self {
7070
Self {
7171
seed,
7272
octaves: Self::DEFAULT_OCTAVE_COUNT,
@@ -97,7 +97,7 @@ where
9797
T: Default + Seedable,
9898
{
9999
fn default() -> Self {
100-
Self::new(Self::DEFAULT_SEED)
100+
Self::new(DEFAULT_SEED)
101101
}
102102
}
103103

@@ -140,7 +140,7 @@ impl<T> Seedable for Fbm<T>
140140
where
141141
T: Default + Seedable,
142142
{
143-
fn set_seed(self, seed: u32) -> Self {
143+
fn set_seed(self, seed: Seed) -> Self {
144144
if self.seed == seed {
145145
return self;
146146
}
@@ -152,7 +152,7 @@ where
152152
}
153153
}
154154

155-
fn seed(&self) -> u32 {
155+
fn seed(&self) -> Seed {
156156
self.seed
157157
}
158158
}

src/noise_fns/generators/fractals/hybridmulti.rs

Lines changed: 7 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

@@ -38,7 +39,7 @@ pub struct HybridMulti<T> {
3839
/// persistence produces "rougher" noise.
3940
pub persistence: f64,
4041

41-
seed: u32,
42+
seed: Seed,
4243
sources: Vec<T>,
4344
scale_factor: f64,
4445
}
@@ -47,14 +48,13 @@ impl<T> HybridMulti<T>
4748
where
4849
T: Default + Seedable,
4950
{
50-
pub const DEFAULT_SEED: u32 = 0;
5151
pub const DEFAULT_OCTAVES: usize = 6;
5252
pub const DEFAULT_FREQUENCY: f64 = 2.0;
5353
pub const DEFAULT_LACUNARITY: f64 = core::f64::consts::PI * 2.0 / 3.0;
5454
pub const DEFAULT_PERSISTENCE: f64 = 0.25;
5555
pub const MAX_OCTAVES: usize = 32;
5656

57-
pub fn new(seed: u32) -> Self {
57+
pub fn new(seed: Seed) -> Self {
5858
Self {
5959
seed,
6060
octaves: Self::DEFAULT_OCTAVES,
@@ -100,7 +100,7 @@ where
100100
T: Default + Seedable,
101101
{
102102
fn default() -> Self {
103-
Self::new(Self::DEFAULT_SEED)
103+
Self::new(DEFAULT_SEED)
104104
}
105105
}
106106

@@ -143,7 +143,7 @@ impl<T> Seedable for HybridMulti<T>
143143
where
144144
T: Default + Seedable,
145145
{
146-
fn set_seed(self, seed: u32) -> Self {
146+
fn set_seed(self, seed: Seed) -> Self {
147147
if self.seed == seed {
148148
return self;
149149
}
@@ -155,7 +155,7 @@ where
155155
}
156156
}
157157

158-
fn seed(&self) -> u32 {
158+
fn seed(&self) -> Seed {
159159
self.seed
160160
}
161161
}

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)