From 6b6c349cfa02486c25639fdc09d343145e8da899 Mon Sep 17 00:00:00 2001 From: Sébastien Crozet Date: Fri, 1 Mar 2024 20:18:19 +0100 Subject: Fix testbed snapshot restore system --- src_testbed/physics/mod.rs | 16 +++++++++++++++- src_testbed/testbed.rs | 33 +++++++++++++++++++++++++++------ 2 files changed, 42 insertions(+), 7 deletions(-) (limited to 'src_testbed') diff --git a/src_testbed/physics/mod.rs b/src_testbed/physics/mod.rs index 26a55c7..bc00327 100644 --- a/src_testbed/physics/mod.rs +++ b/src_testbed/physics/mod.rs @@ -14,6 +14,8 @@ pub struct PhysicsSnapshot { bodies: Vec, colliders: Vec, impulse_joints: Vec, + multibody_joints: Vec, + island_manager: Vec, } impl PhysicsSnapshot { @@ -21,17 +23,21 @@ impl PhysicsSnapshot { timestep_id: usize, broad_phase: &BroadPhase, narrow_phase: &NarrowPhase, + island_manager: &IslandManager, bodies: &RigidBodySet, colliders: &ColliderSet, impulse_joints: &ImpulseJointSet, + multibody_joints: &MultibodyJointSet, ) -> bincode::Result { Ok(Self { timestep_id, broad_phase: bincode::serialize(broad_phase)?, narrow_phase: bincode::serialize(narrow_phase)?, + island_manager: bincode::serialize(island_manager)?, bodies: bincode::serialize(bodies)?, colliders: bincode::serialize(colliders)?, impulse_joints: bincode::serialize(impulse_joints)?, + multibody_joints: bincode::serialize(multibody_joints)?, }) } @@ -41,32 +47,40 @@ impl PhysicsSnapshot { usize, BroadPhase, NarrowPhase, + IslandManager, RigidBodySet, ColliderSet, ImpulseJointSet, + MultibodyJointSet, )> { Ok(( self.timestep_id, bincode::deserialize(&self.broad_phase)?, bincode::deserialize(&self.narrow_phase)?, + bincode::deserialize(&self.island_manager)?, bincode::deserialize(&self.bodies)?, bincode::deserialize(&self.colliders)?, bincode::deserialize(&self.impulse_joints)?, + bincode::deserialize(&self.multibody_joints)?, )) } pub fn print_snapshot_len(&self) { let total = self.broad_phase.len() + self.narrow_phase.len() + + self.island_manager.len() + self.bodies.len() + self.colliders.len() - + self.impulse_joints.len(); + + self.impulse_joints.len() + + self.multibody_joints.len(); println!("Snapshot length: {}B", total); println!("|_ broad_phase: {}B", self.broad_phase.len()); println!("|_ narrow_phase: {}B", self.narrow_phase.len()); + println!("|_ island_manager: {}B", self.island_manager.len()); println!("|_ bodies: {}B", self.bodies.len()); println!("|_ colliders: {}B", self.colliders.len()); println!("|_ impulse_joints: {}B", self.impulse_joints.len()); + println!("|_ multibody_joints: {}B", self.multibody_joints.len()); } } diff --git a/src_testbed/testbed.rs b/src_testbed/testbed.rs index e5a5f13..5430384 100644 --- a/src_testbed/testbed.rs +++ b/src_testbed/testbed.rs @@ -24,7 +24,7 @@ use rapier::dynamics::{ use rapier::geometry::Ray; use rapier::geometry::{ColliderHandle, ColliderSet, NarrowPhase}; use rapier::math::{Real, Vector}; -use rapier::pipeline::{PhysicsHooks, QueryFilter}; +use rapier::pipeline::{PhysicsHooks, QueryFilter, QueryPipeline}; #[cfg(all(feature = "dim2", feature = "other-backends"))] use crate::box2d_backend::Box2dWorld; @@ -1250,9 +1250,11 @@ fn update_testbed( harness.state.timestep_id, &harness.physics.broad_phase, &harness.physics.narrow_phase, + &harness.physics.islands, &harness.physics.bodies, &harness.physics.colliders, &harness.physics.impulse_joints, + &harness.physics.multibody_joints, ) .ok(); @@ -1269,17 +1271,36 @@ fn update_testbed( .action_flags .set(TestbedActionFlags::RESTORE_SNAPSHOT, false); if let Some(snapshot) = &state.snapshot { - if let Ok(w) = snapshot.restore() { + if let Ok(( + timestep_id, + broad_phase, + narrow_phase, + island_manager, + bodies, + colliders, + impulse_joints, + multibody_joints, + )) = snapshot.restore() + { clear(&mut commands, &mut state, &mut graphics, &mut plugins); for plugin in &mut plugins.0 { plugin.clear_graphics(&mut graphics, &mut commands); } - // set_world(w.3, w.4, w.5); - harness.physics.broad_phase = w.1; - harness.physics.narrow_phase = w.2; - harness.state.timestep_id = w.0; + harness.state.timestep_id = timestep_id; + harness.physics.broad_phase = broad_phase; + harness.physics.narrow_phase = narrow_phase; + harness.physics.islands = island_manager; + harness.physics.bodies = bodies; + harness.physics.colliders = colliders; + harness.physics.impulse_joints = impulse_joints; + harness.physics.multibody_joints = multibody_joints; + harness.physics.query_pipeline = QueryPipeline::new(); + + state + .action_flags + .set(TestbedActionFlags::RESET_WORLD_GRAPHICS, true); } } } -- cgit From f9663f894c022e25ae6c6bc572dc305fab1adb76 Mon Sep 17 00:00:00 2001 From: Sébastien Crozet Date: Sat, 23 Mar 2024 10:25:56 +0100 Subject: chore: clippy fix --- src_testbed/physics/mod.rs | 44 ++++++++++++++++++++++---------------------- src_testbed/testbed.rs | 6 +++--- 2 files changed, 25 insertions(+), 25 deletions(-) (limited to 'src_testbed') diff --git a/src_testbed/physics/mod.rs b/src_testbed/physics/mod.rs index bc00327..c3b750f 100644 --- a/src_testbed/physics/mod.rs +++ b/src_testbed/physics/mod.rs @@ -18,6 +18,17 @@ pub struct PhysicsSnapshot { island_manager: Vec, } +pub struct DeserializedPhysicsSnapshot { + pub timestep_id: usize, + pub broad_phase: BroadPhase, + pub narrow_phase: NarrowPhase, + pub island_manager: IslandManager, + pub bodies: RigidBodySet, + pub colliders: ColliderSet, + pub impulse_joints: ImpulseJointSet, + pub multibody_joints: MultibodyJointSet, +} + impl PhysicsSnapshot { pub fn new( timestep_id: usize, @@ -41,28 +52,17 @@ impl PhysicsSnapshot { }) } - pub fn restore( - &self, - ) -> bincode::Result<( - usize, - BroadPhase, - NarrowPhase, - IslandManager, - RigidBodySet, - ColliderSet, - ImpulseJointSet, - MultibodyJointSet, - )> { - Ok(( - self.timestep_id, - bincode::deserialize(&self.broad_phase)?, - bincode::deserialize(&self.narrow_phase)?, - bincode::deserialize(&self.island_manager)?, - bincode::deserialize(&self.bodies)?, - bincode::deserialize(&self.colliders)?, - bincode::deserialize(&self.impulse_joints)?, - bincode::deserialize(&self.multibody_joints)?, - )) + pub fn restore(&self) -> bincode::Result { + Ok(DeserializedPhysicsSnapshot { + timestep_id: self.timestep_id, + broad_phase: bincode::deserialize(&self.broad_phase)?, + narrow_phase: bincode::deserialize(&self.narrow_phase)?, + island_manager: bincode::deserialize(&self.island_manager)?, + bodies: bincode::deserialize(&self.bodies)?, + colliders: bincode::deserialize(&self.colliders)?, + impulse_joints: bincode::deserialize(&self.impulse_joints)?, + multibody_joints: bincode::deserialize(&self.multibody_joints)?, + }) } pub fn print_snapshot_len(&self) { diff --git a/src_testbed/testbed.rs b/src_testbed/testbed.rs index 5430384..780e23e 100644 --- a/src_testbed/testbed.rs +++ b/src_testbed/testbed.rs @@ -7,7 +7,7 @@ use std::num::NonZeroUsize; use bevy::prelude::*; use crate::debug_render::{DebugRenderPipelineResource, RapierDebugRenderPlugin}; -use crate::physics::{PhysicsEvents, PhysicsSnapshot, PhysicsState}; +use crate::physics::{DeserializedPhysicsSnapshot, PhysicsEvents, PhysicsSnapshot, PhysicsState}; use crate::plugin::TestbedPlugin; use crate::ui; use crate::{graphics::GraphicsManager, harness::RunState}; @@ -1271,7 +1271,7 @@ fn update_testbed( .action_flags .set(TestbedActionFlags::RESTORE_SNAPSHOT, false); if let Some(snapshot) = &state.snapshot { - if let Ok(( + if let Ok(DeserializedPhysicsSnapshot { timestep_id, broad_phase, narrow_phase, @@ -1280,7 +1280,7 @@ fn update_testbed( colliders, impulse_joints, multibody_joints, - )) = snapshot.restore() + }) = snapshot.restore() { clear(&mut commands, &mut state, &mut graphics, &mut plugins); -- cgit From cfb2c2c93e39e1f59557c4f32fde4a68dc4cd6fc Mon Sep 17 00:00:00 2001 From: Sébastien Crozet Date: Sat, 23 Mar 2024 13:26:53 +0100 Subject: feat!: rename BroadPhase to BroadPhaseMultiSap --- src_testbed/harness/mod.rs | 4 ++-- src_testbed/physics/mod.rs | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) (limited to 'src_testbed') diff --git a/src_testbed/harness/mod.rs b/src_testbed/harness/mod.rs index e27a03a..458f02f 100644 --- a/src_testbed/harness/mod.rs +++ b/src_testbed/harness/mod.rs @@ -9,7 +9,7 @@ use rapier::dynamics::{ CCDSolver, ImpulseJointSet, IntegrationParameters, IslandManager, MultibodyJointSet, RigidBodySet, }; -use rapier::geometry::{BroadPhase, ColliderSet, NarrowPhase}; +use rapier::geometry::{BroadPhaseMultiSap, ColliderSet, NarrowPhase}; use rapier::math::{Real, Vector}; use rapier::pipeline::{ChannelEventCollector, PhysicsHooks, PhysicsPipeline, QueryPipeline}; @@ -179,7 +179,7 @@ impl Harness { self.physics.hooks = Box::new(hooks); self.physics.islands = IslandManager::new(); - self.physics.broad_phase = BroadPhase::new(); + self.physics.broad_phase = BroadPhaseMultiSap::new(); self.physics.narrow_phase = NarrowPhase::new(); self.state.timestep_id = 0; self.state.time = 0.0; diff --git a/src_testbed/physics/mod.rs b/src_testbed/physics/mod.rs index c3b750f..38c9da0 100644 --- a/src_testbed/physics/mod.rs +++ b/src_testbed/physics/mod.rs @@ -3,7 +3,9 @@ use rapier::dynamics::{ CCDSolver, ImpulseJointSet, IntegrationParameters, IslandManager, MultibodyJointSet, RigidBodySet, }; -use rapier::geometry::{BroadPhase, ColliderSet, CollisionEvent, ContactForceEvent, NarrowPhase}; +use rapier::geometry::{ + BroadPhaseMultiSap, ColliderSet, CollisionEvent, ContactForceEvent, NarrowPhase, +}; use rapier::math::{Real, Vector}; use rapier::pipeline::{PhysicsHooks, PhysicsPipeline, QueryPipeline}; @@ -20,7 +22,7 @@ pub struct PhysicsSnapshot { pub struct DeserializedPhysicsSnapshot { pub timestep_id: usize, - pub broad_phase: BroadPhase, + pub broad_phase: BroadPhaseMultiSap, pub narrow_phase: NarrowPhase, pub island_manager: IslandManager, pub bodies: RigidBodySet, @@ -32,7 +34,7 @@ pub struct DeserializedPhysicsSnapshot { impl PhysicsSnapshot { pub fn new( timestep_id: usize, - broad_phase: &BroadPhase, + broad_phase: &BroadPhaseMultiSap, narrow_phase: &NarrowPhase, island_manager: &IslandManager, bodies: &RigidBodySet, @@ -86,7 +88,7 @@ impl PhysicsSnapshot { pub struct PhysicsState { pub islands: IslandManager, - pub broad_phase: BroadPhase, + pub broad_phase: BroadPhaseMultiSap, pub narrow_phase: NarrowPhase, pub bodies: RigidBodySet, pub colliders: ColliderSet, @@ -110,7 +112,7 @@ impl PhysicsState { pub fn new() -> Self { Self { islands: IslandManager::new(), - broad_phase: BroadPhase::new(), + broad_phase: BroadPhaseMultiSap::new(), narrow_phase: NarrowPhase::new(), bodies: RigidBodySet::new(), colliders: ColliderSet::new(), -- cgit From b3a00b4123c85d047b5ab6b89d4d500cc2b92ba6 Mon Sep 17 00:00:00 2001 From: Sébastien Crozet Date: Sat, 23 Mar 2024 14:47:05 +0100 Subject: feat: add the DefaultBroadPhase type alias --- src_testbed/harness/mod.rs | 4 ++-- src_testbed/physics/mod.rs | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'src_testbed') diff --git a/src_testbed/harness/mod.rs b/src_testbed/harness/mod.rs index 458f02f..9c41472 100644 --- a/src_testbed/harness/mod.rs +++ b/src_testbed/harness/mod.rs @@ -9,7 +9,7 @@ use rapier::dynamics::{ CCDSolver, ImpulseJointSet, IntegrationParameters, IslandManager, MultibodyJointSet, RigidBodySet, }; -use rapier::geometry::{BroadPhaseMultiSap, ColliderSet, NarrowPhase}; +use rapier::geometry::{ColliderSet, DefaultBroadPhase, NarrowPhase}; use rapier::math::{Real, Vector}; use rapier::pipeline::{ChannelEventCollector, PhysicsHooks, PhysicsPipeline, QueryPipeline}; @@ -179,7 +179,7 @@ impl Harness { self.physics.hooks = Box::new(hooks); self.physics.islands = IslandManager::new(); - self.physics.broad_phase = BroadPhaseMultiSap::new(); + self.physics.broad_phase = DefaultBroadPhase::new(); self.physics.narrow_phase = NarrowPhase::new(); self.state.timestep_id = 0; self.state.time = 0.0; diff --git a/src_testbed/physics/mod.rs b/src_testbed/physics/mod.rs index 38c9da0..3c69f6e 100644 --- a/src_testbed/physics/mod.rs +++ b/src_testbed/physics/mod.rs @@ -4,7 +4,7 @@ use rapier::dynamics::{ RigidBodySet, }; use rapier::geometry::{ - BroadPhaseMultiSap, ColliderSet, CollisionEvent, ContactForceEvent, NarrowPhase, + ColliderSet, CollisionEvent, ContactForceEvent, DefaultBroadPhase, NarrowPhase, }; use rapier::math::{Real, Vector}; use rapier::pipeline::{PhysicsHooks, PhysicsPipeline, QueryPipeline}; @@ -22,7 +22,7 @@ pub struct PhysicsSnapshot { pub struct DeserializedPhysicsSnapshot { pub timestep_id: usize, - pub broad_phase: BroadPhaseMultiSap, + pub broad_phase: DefaultBroadPhase, pub narrow_phase: NarrowPhase, pub island_manager: IslandManager, pub bodies: RigidBodySet, @@ -34,7 +34,7 @@ pub struct DeserializedPhysicsSnapshot { impl PhysicsSnapshot { pub fn new( timestep_id: usize, - broad_phase: &BroadPhaseMultiSap, + broad_phase: &DefaultBroadPhase, narrow_phase: &NarrowPhase, island_manager: &IslandManager, bodies: &RigidBodySet, @@ -88,7 +88,7 @@ impl PhysicsSnapshot { pub struct PhysicsState { pub islands: IslandManager, - pub broad_phase: BroadPhaseMultiSap, + pub broad_phase: DefaultBroadPhase, pub narrow_phase: NarrowPhase, pub bodies: RigidBodySet, pub colliders: ColliderSet, @@ -112,7 +112,7 @@ impl PhysicsState { pub fn new() -> Self { Self { islands: IslandManager::new(), - broad_phase: BroadPhaseMultiSap::new(), + broad_phase: DefaultBroadPhase::new(), narrow_phase: NarrowPhase::new(), bodies: RigidBodySet::new(), colliders: ColliderSet::new(), -- cgit From 2df7258570ce59aedd7fb4c0dea3d3290eb02a47 Mon Sep 17 00:00:00 2001 From: Sébastien Crozet Date: Sun, 24 Mar 2024 17:25:42 +0100 Subject: feat: update testbeds to bevy 0.13 --- src_testbed/camera2d.rs | 2 +- src_testbed/camera3d.rs | 2 +- src_testbed/debug_render.rs | 6 ++-- src_testbed/graphics.rs | 26 ++++++++++---- src_testbed/objects/node.rs | 84 ++++++++++++++++++++++++--------------------- src_testbed/plugin.rs | 6 ++-- src_testbed/testbed.rs | 80 +++++++++++++++++++++++------------------- 7 files changed, 117 insertions(+), 89 deletions(-) (limited to 'src_testbed') diff --git a/src_testbed/camera2d.rs b/src_testbed/camera2d.rs index 6ba17a1..ae5c163 100644 --- a/src_testbed/camera2d.rs +++ b/src_testbed/camera2d.rs @@ -48,7 +48,7 @@ impl OrbitCameraPlugin { fn mouse_motion_system( _time: Res