summaryrefslogtreecommitdiff
path: root/src/sim/rb_manager/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sim/rb_manager/mod.rs')
-rw-r--r--src/sim/rb_manager/mod.rs83
1 files changed, 25 insertions, 58 deletions
diff --git a/src/sim/rb_manager/mod.rs b/src/sim/rb_manager/mod.rs
index a70c677..2d95eb7 100644
--- a/src/sim/rb_manager/mod.rs
+++ b/src/sim/rb_manager/mod.rs
@@ -2,7 +2,13 @@ pub mod debug_render;
use fxhash::FxHashMap;
use glam::Vec2;
-use rapier2d::{geometry, glamx::vec2, prelude};
+use rapier2d::{
+ dynamics::IntegrationParameters,
+ geometry,
+ glamx::vec2,
+ pipeline::{DebugRenderPipeline, PhysicsWorld},
+ prelude,
+};
use crate::{
config::{CELLS_TO_METRES, CHUNK_SIZE, PHYSICS_DELTA_TIME},
@@ -16,37 +22,23 @@ use crate::{
pub use rapier2d::pipeline::DebugRenderMode;
pub struct PhysicsManager {
- pub rigid_body_set: prelude::RigidBodySet,
- pub collider_set: prelude::ColliderSet,
- pub physics_pipeline: prelude::PhysicsPipeline,
- pub integration_parameters: prelude::IntegrationParameters,
- pub island_manager: prelude::IslandManager,
- pub broad_phase: prelude::DefaultBroadPhase,
- pub narrow_phase: prelude::NarrowPhase,
- pub impulse_joint_set: prelude::ImpulseJointSet,
- pub multibody_joint_set: prelude::MultibodyJointSet,
- pub ccd_solver: prelude::CCDSolver,
- pub debug_render_pipeline: prelude::DebugRenderPipeline,
+ pub world: PhysicsWorld,
+ pub debug_render_pipeline: DebugRenderPipeline,
}
impl PhysicsManager {
pub fn new() -> Self {
+ let mut world = PhysicsWorld::new();
+ let gravity = vec2(0.0, 9.81);
+ world.gravity = gravity;
+ world.integration_parameters = IntegrationParameters {
+ // 20 pixels <-> 1 meter
+ length_unit: CELLS_TO_METRES,
+ dt: PHYSICS_DELTA_TIME,
+ ..prelude::IntegrationParameters::default()
+ };
PhysicsManager {
- rigid_body_set: prelude::RigidBodySet::new(),
- collider_set: prelude::ColliderSet::new(),
- physics_pipeline: prelude::PhysicsPipeline::new(),
- integration_parameters: prelude::IntegrationParameters {
- // 20 pixels <-> 1 meter
- length_unit: CELLS_TO_METRES,
- dt: PHYSICS_DELTA_TIME,
- ..prelude::IntegrationParameters::default()
- },
- island_manager: prelude::IslandManager::new(),
- broad_phase: prelude::DefaultBroadPhase::new(),
- narrow_phase: prelude::NarrowPhase::new(),
- impulse_joint_set: prelude::ImpulseJointSet::new(),
- multibody_joint_set: prelude::MultibodyJointSet::new(),
- ccd_solver: prelude::CCDSolver::new(),
+ world,
debug_render_pipeline: prelude::DebugRenderPipeline::new(
prelude::DebugRenderStyle {
sleep_color_multiplier: [1.0; 4],
@@ -70,37 +62,17 @@ pub struct RbManager {
impl RbManager {
pub fn tick(&mut self, _delta_time: f32) {
- let gravity = vec2(0.0, 9.81);
-
- self.physics_manager.physics_pipeline.step(
- gravity,
- &self.physics_manager.integration_parameters,
- &mut self.physics_manager.island_manager,
- &mut self.physics_manager.broad_phase,
- &mut self.physics_manager.narrow_phase,
- &mut self.physics_manager.rigid_body_set,
- &mut self.physics_manager.collider_set,
- &mut self.physics_manager.impulse_joint_set,
- &mut self.physics_manager.multibody_joint_set,
- &mut self.physics_manager.ccd_solver,
- &(),
- &(),
- );
+ self.physics_manager.world.step();
}
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(
+ self.physics_manager.debug_render_pipeline.mode = mode;
+ self.physics_manager.world.debug_render(
+ &mut self.physics_manager.debug_render_pipeline,
&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
@@ -160,15 +132,10 @@ impl RbManager {
);
if let Some(handle) = self.chunk_colliders.remove(&(cx, cy)) {
- self.physics_manager.collider_set.remove(
- handle,
- &mut self.physics_manager.island_manager,
- &mut self.physics_manager.rigid_body_set,
- false,
- );
+ self.physics_manager.world.remove_collider(handle);
}
- let handle = self.physics_manager.collider_set.insert(collider);
+ let handle = self.physics_manager.world.insert_collider(collider, None);
self.chunk_colliders.insert((cx, cy), handle);
}