|
|
|
@ -52,6 +52,25 @@ impl Universe{
|
|
|
|
|
}
|
|
|
|
|
count
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn regenerate_cells(&mut self) {
|
|
|
|
|
let size = (self.width * self.height) as usize;
|
|
|
|
|
self.cells = FixedBitSet::with_capacity(size);
|
|
|
|
|
for i in 0..size {
|
|
|
|
|
self.cells.set(i, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn get_cells(&self) -> &FixedBitSet {
|
|
|
|
|
&self.cells
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn set_cells(&mut self, cells: &[(u32, u32)]) {
|
|
|
|
|
for (row, col) in cells.iter().cloned() {
|
|
|
|
|
let i = self.get_index(row, col);
|
|
|
|
|
self.cells.set(i, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[wasm_bindgen]
|
|
|
|
@ -76,6 +95,16 @@ impl Universe {
|
|
|
|
|
self.cells = next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn set_width(&mut self, width: u32) {
|
|
|
|
|
self.width = width;
|
|
|
|
|
self.regenerate_cells();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn set_height(&mut self, height: u32) {
|
|
|
|
|
self.height = height;
|
|
|
|
|
self.regenerate_cells();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn new() -> Universe {
|
|
|
|
|
let width = 64;
|
|
|
|
|
let height = 64;
|
|
|
|
@ -84,7 +113,7 @@ impl Universe {
|
|
|
|
|
let mut cells = FixedBitSet::with_capacity(size);
|
|
|
|
|
|
|
|
|
|
for i in 0..size {
|
|
|
|
|
cells.set(i, i % 2 == 0 || i % 7 == 0);
|
|
|
|
|
cells.set(i, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Universe {
|
|
|
|
@ -94,7 +123,7 @@ impl Universe {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn new_random() -> Universe {
|
|
|
|
|
pub fn new_modulo() -> Universe {
|
|
|
|
|
let width = 64;
|
|
|
|
|
let height = 64;
|
|
|
|
|
let size = (width * height) as usize;
|
|
|
|
@ -102,7 +131,7 @@ impl Universe {
|
|
|
|
|
let mut cells = FixedBitSet::with_capacity(size);
|
|
|
|
|
|
|
|
|
|
for i in 0..size {
|
|
|
|
|
cells.set(i, js_sys::Math::random() < 0.5);
|
|
|
|
|
cells.set(i, i % 2 == 0 || i % 7 == 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Universe {
|
|
|
|
@ -112,22 +141,15 @@ impl Universe {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn new_space_ship() -> Universe {
|
|
|
|
|
let width : u32 = 64;
|
|
|
|
|
let height : u32 = 64;
|
|
|
|
|
pub fn new_random() -> Universe {
|
|
|
|
|
let width = 64;
|
|
|
|
|
let height = 64;
|
|
|
|
|
let size = (width * height) as usize;
|
|
|
|
|
|
|
|
|
|
let mut cells = FixedBitSet::with_capacity(size);
|
|
|
|
|
|
|
|
|
|
for i in 0..size {
|
|
|
|
|
cells.set(i, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let x0 = 32;
|
|
|
|
|
let y0 = 32;
|
|
|
|
|
for (x, y) in [(0, 2), (1, 0), (1, 2), (2, 1), (2, 2)].iter().cloned() {
|
|
|
|
|
let i = ((y0 + y) * width + x0 + x) as usize;
|
|
|
|
|
cells.set(i, true);
|
|
|
|
|
cells.set(i, js_sys::Math::random() < 0.5);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Universe {
|
|
|
|
@ -137,6 +159,20 @@ impl Universe {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn new_space_ship() -> Universe {
|
|
|
|
|
let mut univese = Universe::new();
|
|
|
|
|
const X0: u32 = 32;
|
|
|
|
|
const Y0: u32 = 32;
|
|
|
|
|
let cells = &(
|
|
|
|
|
[(0, 2), (1, 0), (1, 2), (2, 1), (2, 2)]
|
|
|
|
|
.iter()
|
|
|
|
|
.map(|(x, y)| (X0+x, Y0+y))
|
|
|
|
|
.collect::<Vec<(u32, u32)>>()
|
|
|
|
|
);
|
|
|
|
|
univese.set_cells(cells);
|
|
|
|
|
univese
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn render(&self) -> String {
|
|
|
|
|
self.to_string()
|
|
|
|
|
}
|
|
|
|
|