diff options
| author | Geoffrey Hayes <hayesgm@gmail.com> | 2022-02-24 02:41:26 -0800 |
|---|---|---|
| committer | Sébastien Crozet <sebastien@crozet.re> | 2022-03-06 22:46:12 +0100 |
| commit | 0ef55c7df7160a6178dc52502408c3293b50a503 (patch) | |
| tree | 4ce92e3fcf9a920cd231370a5b4073fdce9f2a94 | |
| parent | 7703333781ccb19e533c25eb53f19a01e51858f7 (diff) | |
| download | rapier-0ef55c7df7160a6178dc52502408c3293b50a503.tar.gz rapier-0ef55c7df7160a6178dc52502408c3293b50a503.tar.bz2 rapier-0ef55c7df7160a6178dc52502408c3293b50a503.zip | |
Start to Load World State
This patch starts to load world state for debugging. The next step is to make sure that deserialization exactly matches the format of world.takeSnapshot().
| -rw-r--r-- | examples3d/Cargo.toml | 2 | ||||
| -rw-r--r-- | examples3d/all_examples3.rs | 5 | ||||
| -rw-r--r-- | examples3d/debug_serialized3.rs | 38 | ||||
| -rw-r--r-- | state.bin | bin | 0 -> 16369 bytes |
4 files changed, 45 insertions, 0 deletions
diff --git a/examples3d/Cargo.toml b/examples3d/Cargo.toml index bbab27e..c50dc95 100644 --- a/examples3d/Cargo.toml +++ b/examples3d/Cargo.toml @@ -18,6 +18,8 @@ getrandom = { version = "0.2", features = [ "js" ] } Inflector = "0.11" wasm-bindgen = "0.2" obj-rs = { version = "0.6", default-features = false } +serde = "1" +bincode = "1" [dependencies.rapier_testbed3d] path = "../crates/rapier_testbed3d" diff --git a/examples3d/all_examples3.rs b/examples3d/all_examples3.rs index 0aad4c2..2b51a7f 100644 --- a/examples3d/all_examples3.rs +++ b/examples3d/all_examples3.rs @@ -25,6 +25,7 @@ mod debug_friction3; mod debug_infinite_fall3; mod debug_prismatic3; mod debug_rollback3; +mod debug_serialized3; mod debug_shape_modification3; mod debug_triangle3; mod debug_trimesh3; @@ -122,6 +123,10 @@ pub fn main() { "(Debug) shape modification", debug_shape_modification3::init_world, ), + ( + "A serialized", + debug_serialized3::init_world, + ), ]; // Lexicographic sort, with stress tests moved at the end of the list. diff --git a/examples3d/debug_serialized3.rs b/examples3d/debug_serialized3.rs new file mode 100644 index 0000000..76766c8 --- /dev/null +++ b/examples3d/debug_serialized3.rs @@ -0,0 +1,38 @@ +use rapier3d::prelude::*; +use rapier_testbed3d::Testbed; + +#[derive(serde::Deserialize)] +struct PhysicsState { + pub gravity: Vector<f32>, + pub integration_parameters: IntegrationParameters, + pub islands: IslandManager, + pub broad_phase: BroadPhase, + pub narrow_phase: NarrowPhase, + pub bodies: RigidBodySet, + pub colliders: ColliderSet, + pub impulse_joints: ImpulseJointSet, + pub multibody_joints: MultibodyJointSet, +} + +pub fn init_world(testbed: &mut Testbed) { + /* + * Set up the testbed. + */ + let bytes = std::fs::read("state.bin").unwrap(); + let mut state: PhysicsState = bincode::deserialize(&bytes).unwrap(); + + testbed.set_world( + state.bodies, + state.colliders, + state.impulse_joints, + state.multibody_joints, + ); + testbed.harness_mut().physics.islands = state.islands; + testbed.harness_mut().physics.broad_phase = state.broad_phase; + testbed.harness_mut().physics.narrow_phase = state.narrow_phase; + testbed.harness_mut().physics.integration_parameters = state.integration_parameters; + testbed.harness_mut().physics.gravity = state.gravity; + + testbed.set_graphics_shift(vector![-541.0, -6377257.0, -61.0]); + testbed.look_at(point![10.0, 10.0, 10.0], point![0.0, 0.0, 0.0]); +} diff --git a/state.bin b/state.bin Binary files differnew file mode 100644 index 0000000..beb406a --- /dev/null +++ b/state.bin |
