diff options
| author | Sébastien Crozet <developer@crozet.re> | 2023-01-22 19:01:09 +0100 |
|---|---|---|
| committer | Sébastien Crozet <developer@crozet.re> | 2023-01-22 19:01:09 +0100 |
| commit | 26596bdc2ef7537619ab763668381f8b5496b726 (patch) | |
| tree | 1ddab05177fba9f61ad68c779c1f9bb09fd35a64 /src_testbed | |
| parent | 1a4183cc94acc3210e4ae467abbea7d68e51c5ff (diff) | |
| download | rapier-voxels.tar.gz rapier-voxels.tar.bz2 rapier-voxels.zip | |
Voxel fracture experimentsvoxels
Diffstat (limited to 'src_testbed')
| -rw-r--r-- | src_testbed/harness/mod.rs | 4 | ||||
| -rw-r--r-- | src_testbed/objects/node.rs | 7 | ||||
| -rw-r--r-- | src_testbed/physics/mod.rs | 4 |
3 files changed, 12 insertions, 3 deletions
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<Mesh> { 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<CollisionEvent>, pub contact_force_events: Receiver<ContactForceEvent>, + pub fracture_events: Receiver<FractureEvent>, } 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() {} } } |
