diff --git a/src/state.rs b/src/state.rs index 4070cb1..b74444f 100644 --- a/src/state.rs +++ b/src/state.rs @@ -44,7 +44,7 @@ impl CellData { CellKind::Sea => [0., 0., 1., 1.], CellKind::Plain => [0., 1., 0., 1.], CellKind::Beach => [0.82, 0.84, 0.51, 1.], - CellKind::Forest => [0., 0.5, 0., 1.], + CellKind::Forest => [0., 0.5 - (self.moisture*0.4), 0., 1.], CellKind::Dirt => [0.53 - (self.moisture*0.4), 0.38-(self.moisture*0.4), 0.29-(self.moisture*0.4), 1.], CellKind::Stone => [0.5, 0.5, 0.5, 1.] } @@ -152,7 +152,6 @@ impl State { } }, Event::WindowEvent { event: WindowEvent::CursorMoved { position, .. }, ..} => { - dbg!(&position); let w_size = window.inner_size(); let pos = Point { x: ((2.*position.x/(w_size.width as f64))-1.)*(self.uniforms.camera[2] as f64), @@ -162,9 +161,9 @@ impl State { if self.mouse_pressed { for i in c.iter_path(pos) { self.selected_tile = i; - let c = &mut self.map.cells_data[self.selected_tile]; - if let CellKind::Dirt = c.kind { - c.kind = CellKind::Forest; + let cd = &mut self.map.cells_data[self.selected_tile]; + if let CellKind::Dirt = cd.kind { + cd.kind = CellKind::Forest; } } } else { @@ -184,8 +183,8 @@ impl State { self.vertices = Vec::new(); self.indices = Vec::new(); - for (c, data) in self.map.voronoi.iter_cells().zip(self.map.cells_data.iter()) { - let mut color = data.color(); + for (c, cd) in self.map.voronoi.iter_cells().zip(self.map.cells_data.iter()) { + let mut color = cd.color(); if c.site() == self.selected_tile { color[0] = (color[0]+0.4).clamp(0., 1.); color[1] = (color[1]+0.4).clamp(0., 1.); @@ -194,7 +193,7 @@ impl State { let vs = c.iter_vertices().collect::>(); let i = self.vertices.len() as u32; for v in vs.iter() { - self.vertices.push(Vertex { pos: [v.x as f32, v.y as f32, data.z], color }); + self.vertices.push(Vertex { pos: [v.x as f32, v.y as f32, cd.z], color }); } for v in 1..(vs.len()-1) as u32 { self.indices.push(i); @@ -209,7 +208,24 @@ impl State { } } pub fn update(&mut self) { + let mut rng = thread_rng(); + let mut new_forest = Vec::new(); + for cd in self.map.cells_data.iter() { + if let CellKind::Forest = cd.kind { + if rng.gen::() < (0.03*cd.moisture) { + let c = self.map.voronoi.cell(cd.cell); + let n = c.iter_neighbors().choose(&mut rng).unwrap(); + new_forest.push(n); + } + } + } + for i in new_forest { + let cd = &mut self.map.cells_data[i]; + if let CellKind::Dirt = cd.kind { + cd.kind = CellKind::Forest; + } + } + self.frame += 1; - } } \ No newline at end of file