propagate forest
This commit is contained in:
parent
26c2b2970f
commit
b0dcc83519
34
src/state.rs
34
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::<Vec<_>>();
|
||||
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) {
|
||||
self.frame += 1;
|
||||
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::<f32>() < (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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user