From 26596bdc2ef7537619ab763668381f8b5496b726 Mon Sep 17 00:00:00 2001 From: Sébastien Crozet Date: Sun, 22 Jan 2023 19:01:09 +0100 Subject: Voxel fracture experiments --- src_testbed/harness/mod.rs | 4 +++- src_testbed/objects/node.rs | 7 ++++++- src_testbed/physics/mod.rs | 4 +++- 3 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src_testbed') diff --git a/src_testbed/harness/mod.rs b/src_testbed/harness/mod.rs index 9608592..464be42 100644 --- a/src_testbed/harness/mod.rs +++ b/src_testbed/harness/mod.rs @@ -88,11 +88,13 @@ impl Harness { pub fn new_empty() -> Self { let collision_event_channel = crossbeam::channel::unbounded(); let contact_force_event_channel = crossbeam::channel::unbounded(); + let fracture_event_channel = crossbeam::channel::unbounded(); let event_handler = - ChannelEventCollector::new(collision_event_channel.0, contact_force_event_channel.0); + ChannelEventCollector::new(collision_event_channel.0, contact_force_event_channel.0, fracture_event_channel.0); let events = PhysicsEvents { collision_events: collision_event_channel.1, contact_force_events: contact_force_event_channel.1, + fracture_events: fracture_event_channel.1, }; let physics = PhysicsState::new(); let state = RunState::new(); diff --git a/src_testbed/objects/node.rs b/src_testbed/objects/node.rs index f4b9015..fbf49f2 100644 --- a/src_testbed/objects/node.rs +++ b/src_testbed/objects/node.rs @@ -10,9 +10,10 @@ use bevy::render::render_resource::PrimitiveTopology; use rapier::geometry::{ColliderHandle, ColliderSet, Shape, ShapeType}; #[cfg(feature = "dim3")] use rapier::geometry::{Cone, Cylinder}; -use rapier::math::{Isometry, Real, Vector}; +use rapier::math::{Isometry, Point, Real, Vector}; use crate::graphics::BevyMaterial; +use rapier::prelude::Aabb; #[cfg(feature = "dim2")] use { bevy::sprite::MaterialMesh2dBundle, @@ -486,6 +487,10 @@ fn generate_collider_mesh(co_shape: &dyn Shape) -> Option { let poly = co_shape.as_round_convex_polyhedron().unwrap(); bevy_mesh(poly.inner_shape.to_trimesh()) } + ShapeType::Voxels => { + let voxels = co_shape.as_voxels().unwrap(); + bevy_mesh(voxels.to_trimesh()) + } _ => return None, }; diff --git a/src_testbed/physics/mod.rs b/src_testbed/physics/mod.rs index 60214da..9715424 100644 --- a/src_testbed/physics/mod.rs +++ b/src_testbed/physics/mod.rs @@ -5,7 +5,7 @@ use rapier::dynamics::{ }; use rapier::geometry::{BroadPhase, ColliderSet, CollisionEvent, ContactForceEvent, NarrowPhase}; use rapier::math::{Real, Vector}; -use rapier::pipeline::{PhysicsHooks, PhysicsPipeline, QueryPipeline}; +use rapier::pipeline::{FractureEvent, PhysicsHooks, PhysicsPipeline, QueryPipeline}; pub struct PhysicsSnapshot { timestep_id: usize, @@ -109,11 +109,13 @@ impl PhysicsState { pub struct PhysicsEvents { pub collision_events: Receiver, pub contact_force_events: Receiver, + pub fracture_events: Receiver, } impl PhysicsEvents { pub fn poll_all(&self) { while let Ok(_) = self.collision_events.try_recv() {} while let Ok(_) = self.contact_force_events.try_recv() {} + while let Ok(_) = self.fracture_events.try_recv() {} } } -- cgit