diff options
| author | Thierry Berger <contact@thierryberger.com> | 2024-06-03 15:20:24 +0200 |
|---|---|---|
| committer | Thierry Berger <contact@thierryberger.com> | 2024-06-03 15:20:24 +0200 |
| commit | e1ed90603e618e28f48916690d761e0d8213e2ad (patch) | |
| tree | 8399da9825ca9ee8edd601b1265e818fa303b541 /examples2d/s2d_joint_grid.rs | |
| parent | fe336b9b98d5825544ad3a153a84cb59dc9171c6 (diff) | |
| parent | 856675032e76b6eb4bc9e0be4dc87abdbcfe0421 (diff) | |
| download | rapier-e1ed90603e618e28f48916690d761e0d8213e2ad.tar.gz rapier-e1ed90603e618e28f48916690d761e0d8213e2ad.tar.bz2 rapier-e1ed90603e618e28f48916690d761e0d8213e2ad.zip | |
Merge branch 'master' into collider-builder-debug
Diffstat (limited to 'examples2d/s2d_joint_grid.rs')
| -rw-r--r-- | examples2d/s2d_joint_grid.rs | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/examples2d/s2d_joint_grid.rs b/examples2d/s2d_joint_grid.rs new file mode 100644 index 0000000..0033c70 --- /dev/null +++ b/examples2d/s2d_joint_grid.rs @@ -0,0 +1,63 @@ +use rapier2d::prelude::*; +use rapier_testbed2d::Testbed; + +pub fn init_world(testbed: &mut Testbed) { + /* + * World + */ + let mut bodies = RigidBodySet::new(); + let mut colliders = ColliderSet::new(); + let mut impulse_joints = ImpulseJointSet::new(); + let multibody_joints = MultibodyJointSet::new(); + + /* + * Create the joint grid. + */ + let rad = 0.4; + let numi = 100; + let numk = 100; + let shift = 1.0; + let mut index = 0; + let mut handles = vec![RigidBodyHandle::invalid(); numi * numk]; + + for k in 0..numk { + for i in 0..numi { + let body_type = if k >= numk / 2 - 3 && k <= numk / 2 + 3 && i == 0 { + RigidBodyType::Fixed + } else { + RigidBodyType::Dynamic + }; + + let rigid_body = RigidBodyBuilder::new(body_type) + .translation(vector![k as f32 * shift, -(i as f32) * shift]); + let handle = bodies.insert(rigid_body); + let collider = ColliderBuilder::ball(rad); + colliders.insert_with_parent(collider, handle, &mut bodies); + + if i > 0 { + let joint = RevoluteJointBuilder::new() + .local_anchor1(point![0.0, -0.5 * shift]) + .local_anchor2(point![0.0, 0.5 * shift]) + .contacts_enabled(false); + impulse_joints.insert(handles[index - 1], handle, joint, true); + } + + if k > 0 { + let joint = RevoluteJointBuilder::new() + .local_anchor1(point![0.5 * shift, 0.0]) + .local_anchor2(point![-0.5 * shift, 0.0]) + .contacts_enabled(false); + impulse_joints.insert(handles[index - numi], handle, joint, true); + } + + handles[index] = handle; + index += 1; + } + } + + /* + * Set up the testbed. + */ + testbed.set_world(bodies, colliders, impulse_joints, multibody_joints); + testbed.look_at(point![0.0, 2.5], 20.0); +} |
