diff options
author | Griffin Smith <root@gws.fyi> | 2019-07-20T05·40-0400 |
---|---|---|
committer | Griffin Smith <root@gws.fyi> | 2019-07-20T05·40-0400 |
commit | d001b0a017cf4d1a614e636059db257fa75dcc9d (patch) | |
tree | 4074848d47dcb048aff3109a2442895cd0d0bb36 /src/level_gen/util.rs | |
parent | 29c80ac8ba0d733c6c452d8fd39e9561553495b0 (diff) |
Cellular-automata based cave level generator
Diffstat (limited to 'src/level_gen/util.rs')
-rw-r--r-- | src/level_gen/util.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/level_gen/util.rs b/src/level_gen/util.rs new file mode 100644 index 000000000000..89a4a6a882da --- /dev/null +++ b/src/level_gen/util.rs @@ -0,0 +1,31 @@ +use crate::types::Dimensions; +use rand::{distributions, Rng}; + +pub fn falses(dims: &Dimensions) -> Vec<Vec<bool>> { + let mut ret = Vec::with_capacity(dims.h as usize); + for _ in 0..dims.h { + let mut row = Vec::with_capacity(dims.w as usize); + for _ in 0..dims.w { + row.push(false); + } + ret.push(row); + } + ret +} + +pub fn rand_initialize<R: Rng + ?Sized>( + dims: &Dimensions, + rng: &mut R, + alive_chance: f64, +) -> Vec<Vec<bool>> { + let distrib = distributions::Bernoulli::new(alive_chance).unwrap(); + let mut ret = Vec::with_capacity(dims.h as usize); + for _ in 0..dims.h { + let mut row = Vec::with_capacity(dims.w as usize); + for _ in 0..dims.w { + row.push(rng.sample(distrib)); + } + ret.push(row); + } + ret +} |