summaryrefslogtreecommitdiff
path: root/src/sim/particle_manager
diff options
context:
space:
mode:
Diffstat (limited to 'src/sim/particle_manager')
-rw-r--r--src/sim/particle_manager/mod.rs10
-rw-r--r--src/sim/particle_manager/particle.rs10
2 files changed, 18 insertions, 2 deletions
diff --git a/src/sim/particle_manager/mod.rs b/src/sim/particle_manager/mod.rs
index 052369b..559bf2c 100644
--- a/src/sim/particle_manager/mod.rs
+++ b/src/sim/particle_manager/mod.rs
@@ -2,7 +2,7 @@ use crate::{
config::CELLS_TO_METRES,
content::materials::MaterialForm,
sim::{
- cell::cell::Cell, cell_manager::manager::CellManager, lib::ray::AwDda,
+ cell::Cell, cell_manager::manager::CellManager, lib::ray::AwDda,
particle_manager::particle::Particle,
},
};
@@ -23,6 +23,7 @@ impl ParticleManager {
let p = &mut self.particles[i];
p.life -= delta_time;
+ p.collision_grace -= delta_time;
if p.life <= 0.0 {
self.particles.swap_remove(i);
continue 'outer;
@@ -31,6 +32,13 @@ impl ParticleManager {
p.velocity.y += PARTICLE_GRAVITY * delta_time;
let dt_velocity = p.velocity * delta_time;
+ if p.collision_grace > 0.0 {
+ p.position += dt_velocity;
+ i += 1;
+ continue 'outer;
+ }
+
+ // compute collisions
let mut dda = AwDda::new(p.position, p.position + dt_velocity);
if let Some(mut prev) = dda.next() {
diff --git a/src/sim/particle_manager/particle.rs b/src/sim/particle_manager/particle.rs
index c68d81e..279eacb 100644
--- a/src/sim/particle_manager/particle.rs
+++ b/src/sim/particle_manager/particle.rs
@@ -7,15 +7,23 @@ pub struct Particle {
pub velocity: Vec2,
pub material: MaterialId,
pub life: f32,
+ pub collision_grace: f32,
}
impl Particle {
- pub fn new(position: Vec2, velocity: Vec2, material: MaterialId, life: f32) -> Self {
+ pub fn new(
+ position: Vec2,
+ velocity: Vec2,
+ material: MaterialId,
+ life: f32,
+ collision_grace: f32,
+ ) -> Self {
Particle {
position,
velocity,
material,
life,
+ collision_grace,
}
}
}