emulate old reset behaviour

main
Zynh0722 2024-02-17 00:37:07 -08:00
parent ab92ac9430
commit 8d822448f8
2 changed files with 28 additions and 50 deletions

View File

@ -8,7 +8,7 @@ use engine::{PhysicsEngine, PhysicsState};
use nalgebra::vector; use nalgebra::vector;
use nannou::prelude::*; use nannou::prelude::*;
use rapier2d::{ use rapier2d::{
dynamics::{RigidBodyBuilder, RigidBodySet}, dynamics::{RigidBodyBuilder, RigidBodyHandle, RigidBodySet},
geometry::{ColliderBuilder, ColliderSet}, geometry::{ColliderBuilder, ColliderSet},
}; };
@ -82,16 +82,37 @@ fn model(app: &App) -> Model {
} }
// Handle events related to the window and update the model if necessary // Handle events related to the window and update the model if necessary
fn event(app: &App, _model: &mut Model, event: WindowEvent) { fn event(app: &App, model: &mut Model, event: WindowEvent) {
if let KeyReleased(Key::Escape) = event { if let KeyReleased(Key::Escape) = event {
app.quit() app.quit()
} }
// if let Resized(_) = event { if let Resized(_) = event {
// model.particles.clear(); let handles: Vec<RigidBodyHandle> = model
// .engine
// fill_particles(app, &mut model.particles); .state
// } .bodies
.iter()
.map(|(handle, _)| handle)
.collect();
for handle in handles {
model.engine.state.bodies.remove(
handle,
&mut model.engine.state.islands,
&mut model.engine.state.colliders,
&mut model.engine.state.joints,
&mut model.engine.state.multibody_joints,
true,
);
}
fill_particles(
app,
&mut model.engine.state.colliders,
&mut model.engine.state.bodies,
);
}
// println!("{:?}", event); // println!("{:?}", event);
} }

View File

@ -1,43 +0,0 @@
use crate::drawable::Drawable;
use crate::PARTICLE_SIZE;
use nannou::prelude::*;
#[derive(Debug)]
pub struct Particle {
pub pos: Vec2,
pub start_pos: Vec2,
pub radius: f32,
pub time_offset: f32,
}
impl Particle {
pub fn new(pos: Vec2) -> Self {
Self {
pos,
start_pos: pos,
..Default::default()
}
}
}
impl Default for Particle {
fn default() -> Self {
Self {
pos: Default::default(),
radius: PARTICLE_SIZE,
start_pos: Default::default(),
time_offset: random_range(-PI, PI),
}
}
}
impl Drawable for Particle {
fn draw(&self, draw: &Draw) {
draw.ellipse()
.color(RED)
.stroke_weight(1.0)
.radius(self.radius)
.xy(self.pos);
}
}