summaryrefslogtreecommitdiff
path: root/src/sim/rb_sim/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sim/rb_sim/mod.rs')
-rw-r--r--src/sim/rb_sim/mod.rs37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/sim/rb_sim/mod.rs b/src/sim/rb_sim/mod.rs
index 8101afd..48e4282 100644
--- a/src/sim/rb_sim/mod.rs
+++ b/src/sim/rb_sim/mod.rs
@@ -1,3 +1,4 @@
+pub mod debug_render;
pub mod rb_entity;
use fxhash::FxHashMap;
@@ -12,10 +13,15 @@ use crate::{
config::{CELLS_IN_CHUNK, CHUNK_SIZE, PHYSICS_DELTA_TIME, PIXELS_TO_METRES},
sim::{
cell::{cell::Cell, materials::MaterialId},
- rb_sim::rb_entity::RbEntity,
+ rb_sim::{
+ debug_render::{DebugLineBuffer, DebugVertex},
+ rb_entity::RbEntity,
+ },
},
};
+pub use rapier2d::pipeline::DebugRenderMode;
+
pub struct PhysicsManager {
rigid_body_set: prelude::RigidBodySet,
collider_set: prelude::ColliderSet,
@@ -27,6 +33,7 @@ pub struct PhysicsManager {
impulse_joint_set: prelude::ImpulseJointSet,
multibody_joint_set: prelude::MultibodyJointSet,
ccd_solver: prelude::CCDSolver,
+ debug_render_pipeline: prelude::DebugRenderPipeline,
}
impl PhysicsManager {
@@ -47,6 +54,14 @@ impl PhysicsManager {
impulse_joint_set: prelude::ImpulseJointSet::new(),
multibody_joint_set: prelude::MultibodyJointSet::new(),
ccd_solver: prelude::CCDSolver::new(),
+ debug_render_pipeline: prelude::DebugRenderPipeline::new(
+ prelude::DebugRenderStyle {
+ sleep_color_multiplier: [1.0; 4],
+ sleep_eligible_color_multiplier: [1.0; 4],
+ ..prelude::DebugRenderStyle::default()
+ },
+ prelude::DebugRenderMode::default(),
+ ),
}
}
}
@@ -55,6 +70,7 @@ pub struct RbSimManager {
physics_manager: PhysicsManager,
pub rb_entities: FxHashMap<u32, RbEntity>,
next_id: u32,
+ debug_line_buffer: DebugLineBuffer,
}
impl RbSimManager {
@@ -77,6 +93,24 @@ impl RbSimManager {
);
}
+ pub fn debug_render(&mut self, mode: DebugRenderMode) -> &[DebugVertex] {
+ puffin::profile_function!();
+
+ let physics = &mut self.physics_manager;
+ self.debug_line_buffer.vertices.clear();
+ physics.debug_render_pipeline.mode = mode;
+ physics.debug_render_pipeline.render(
+ &mut self.debug_line_buffer,
+ &physics.rigid_body_set,
+ &physics.collider_set,
+ &physics.impulse_joint_set,
+ &physics.multibody_joint_set,
+ &physics.narrow_phase,
+ );
+
+ &self.debug_line_buffer.vertices
+ }
+
pub fn create_rb_entity(
&mut self,
cells: Box<[Cell; CELLS_IN_CHUNK]>,
@@ -175,6 +209,7 @@ impl RbSimManager {
physics_manager: PhysicsManager::new(),
rb_entities: FxHashMap::default(),
next_id: 0,
+ debug_line_buffer: DebugLineBuffer::default(),
}
}
}