Tweak rainfall generation

fd6c7dfe5931f5d183c939f48c515ad6bf92d1b1
This commit is contained in:
Tobias Berger 2022-09-05 21:11:36 +02:00
parent 133798146a
commit 2979b66351
Signed by: toby
GPG key ID: 2D05EFAB764D6A88
3 changed files with 17 additions and 8 deletions

1
Cargo.lock generated
View file

@ -371,7 +371,6 @@ dependencies = [
"bevy_ptr", "bevy_ptr",
"bevy_reflect", "bevy_reflect",
"bevy_render", "bevy_render",
"bevy_scene",
"bevy_sprite", "bevy_sprite",
"bevy_tasks", "bevy_tasks",
"bevy_text", "bevy_text",

View file

@ -5,7 +5,7 @@ edition = "2021"
[features] [features]
debug = ["save/debug"] debug = ["save/debug"]
render = ["bevy/bevy_asset", "bevy/bevy_winit", "bevy/bevy_scene", "bevy/render", "save/render"] render = ["bevy/bevy_asset", "bevy/bevy_winit", "bevy/render", "save/render"]
default = ["render"] default = ["render"]
[dependencies.save] [dependencies.save]

View file

@ -280,12 +280,12 @@ impl World {
} }
fn generate_rainfall_alt(&mut self) -> Result<(), CartesianError> { fn generate_rainfall_alt(&mut self) -> Result<(), CartesianError> {
const MAX_CYCLES: u8 = 25; let max_cycles = self.width;
const ACCUMULATED_RAIN_FACTOR: f32 = 2.0; const ACCUMULATED_RAIN_FACTOR: f32 = 0.002;
const RAINFALL_FACTOR: f32 = 0.1; const RAINFALL_FACTOR: f32 = 0.025;
for _ in 0..MAX_CYCLES { for _ in 0..max_cycles {
for x in 0..self.width { for x in 0..self.width {
let prev_x = (x + 1) % self.width; let prev_x = (x + 1) % self.width;
@ -302,9 +302,19 @@ impl World {
let prev_cell = self.terrain[y as usize][prev_x as usize]; let prev_cell = self.terrain[y as usize][prev_x as usize];
let altitude_difference = f32::max(
0.0,
f32::max(0.0, cell.altitude) - f32::max(0.0, prev_cell.altitude),
);
let final_rain_factor = f32::min(
0.1,
RAINFALL_FACTOR + (altitude_difference / Self::MAX_ALTITUDE) * 0.1,
);
cell.rain_accumulated += prev_cell.rain_accumulated; cell.rain_accumulated += prev_cell.rain_accumulated;
cell.rainfall += cell.rain_accumulated * RAINFALL_FACTOR; let rain_accumulated = cell.rain_accumulated * final_rain_factor;
cell.rain_accumulated -= cell.rainfall; cell.rainfall += rain_accumulated / (width_factor + 0.001);
cell.rain_accumulated -= rain_accumulated;
cell.rain_accumulated = f32::max(cell.rain_accumulated, 0.0); cell.rain_accumulated = f32::max(cell.rain_accumulated, 0.0);