about summary refs log tree commit diff
path: root/src/level_gen/util.rs
diff options
context:
space:
mode:
authorGriffin Smith <root@gws.fyi>2019-07-20T05·40-0400
committerGriffin Smith <root@gws.fyi>2019-07-20T05·40-0400
commitd001b0a017cf4d1a614e636059db257fa75dcc9d (patch)
tree4074848d47dcb048aff3109a2442895cd0d0bb36 /src/level_gen/util.rs
parent29c80ac8ba0d733c6c452d8fd39e9561553495b0 (diff)
Cellular-automata based cave level generator
Diffstat (limited to 'src/level_gen/util.rs')
-rw-r--r--src/level_gen/util.rs31
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
+}