From 8ff232f21b5a15d3d45b7db71f75f56f58716e6c Mon Sep 17 00:00:00 2001 From: hheik <4469778+hheik@users.noreply.github.com> Date: Wed, 4 Jan 2023 22:33:04 +0200 Subject: [PATCH] feat: maximum density after disperse (experimental) --- src/game.rs | 2 +- src/terrain2d.rs | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/game.rs b/src/game.rs index 1fa1671..61456d3 100644 --- a/src/game.rs +++ b/src/game.rs @@ -32,7 +32,7 @@ pub fn init() { fn setup_window(mut windows: ResMut) { if let Some(window) = windows.get_primary_mut() { - window.set_resolution(900.0, 450.0); + window.set_resolution(1280.0, 720.0); window.set_title("Kuilu".to_string()); } } diff --git a/src/terrain2d.rs b/src/terrain2d.rs index 99629a5..e07bf64 100644 --- a/src/terrain2d.rs +++ b/src/terrain2d.rs @@ -226,7 +226,7 @@ fn disperse_gas( .sum::(); // Stop if the gas is already close to a stable state - const STABLE_TRESHOLD: u8 = 10; + const STABLE_TRESHOLD: u8 = 3; if total_densities.iter().all(|(_, _, min, max)| { if u8::abs_diff(*min, *max) > STABLE_TRESHOLD { return false; @@ -572,7 +572,17 @@ impl Terrain2D { let from = self.get_texel(from_global).unwrap_or_default(); let to = self.get_texel(to_global).unwrap_or_default(); let max_transfer = gravity.abs(); - let transfer = (u8::MAX - to.density).min(max_transfer).min(from.density); + + // DEBUG: Test this out, another property? + const MAX_TARGET_DENSITY: u8 = 25; + let transfer = (u8::MAX - to.density) + .min(max_transfer) + .min(from.density) + .min(MAX_TARGET_DENSITY.max(to.density) - to.density); + if transfer == 0 { + return; + } + if from.density - transfer == 0 { self.set_texel(&from_global, Texel2D::default(), simulation_frame); } else {