diff options
Diffstat (limited to 'src/sim/rb_sim/mod.rs')
| -rw-r--r-- | src/sim/rb_sim/mod.rs | 37 |
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(), } } } |
