aboutsummaryrefslogtreecommitdiff
path: root/src_testbed/physx_backend.rs
diff options
context:
space:
mode:
authorCrozet Sébastien <developer@crozet.re>2021-05-25 11:00:13 +0200
committerCrozet Sébastien <developer@crozet.re>2021-05-25 11:00:13 +0200
commit1bef66fea941307a7305ddaebdb0abe3d0cb281f (patch)
tree450bc3cd2fd611f91cb7d7809edcc4260f043b0b /src_testbed/physx_backend.rs
parent47139323e01f978a94ed7aa2c33bbf63b00f4c30 (diff)
downloadrapier-1bef66fea941307a7305ddaebdb0abe3d0cb281f.tar.gz
rapier-1bef66fea941307a7305ddaebdb0abe3d0cb281f.tar.bz2
rapier-1bef66fea941307a7305ddaebdb0abe3d0cb281f.zip
Add prelude + use vectors for setting linvel/translation in builders
Diffstat (limited to 'src_testbed/physx_backend.rs')
-rw-r--r--src_testbed/physx_backend.rs45
1 files changed, 26 insertions, 19 deletions
diff --git a/src_testbed/physx_backend.rs b/src_testbed/physx_backend.rs
index 4c41e2c..6c3155f 100644
--- a/src_testbed/physx_backend.rs
+++ b/src_testbed/physx_backend.rs
@@ -220,23 +220,28 @@ impl PhysxWorld {
if let Some((mut px_shape, px_material, collider_pos)) =
physx_collider_from_rapier_collider(&mut *physics, &mut cooking, &collider)
{
- let parent_body = &bodies[collider.parent()];
-
- if !parent_body.is_dynamic() {
- let actor = rapier2static.get_mut(&collider.parent()).unwrap();
- actor.attach_shape(&mut px_shape);
- } else {
- let actor = rapier2dynamic.get_mut(&collider.parent()).unwrap();
- actor.attach_shape(&mut px_shape);
- }
+ if let Some(parent_handle) = collider.parent() {
+ let parent_body = &bodies[parent_handle];
+
+ if !parent_body.is_dynamic() {
+ let actor = rapier2static.get_mut(&parent_handle).unwrap();
+ actor.attach_shape(&mut px_shape);
+ } else {
+ let actor = rapier2dynamic.get_mut(&parent_handle).unwrap();
+ actor.attach_shape(&mut px_shape);
+ }
- unsafe {
- let pose = collider_pos.into_physx();
- physx_sys::PxShape_setLocalPose_mut(px_shape.as_mut_ptr(), &pose.into());
- }
+ unsafe {
+ let pose = collider_pos.into_physx();
+ physx_sys::PxShape_setLocalPose_mut(
+ px_shape.as_mut_ptr(),
+ &pose.into(),
+ );
+ }
- shapes.push(px_shape);
- materials.push(px_material);
+ shapes.push(px_shape);
+ materials.push(px_material);
+ }
}
}
@@ -454,8 +459,8 @@ impl PhysxWorld {
}
}
JointParams::FixedJoint(params) => {
- let frame1 = params.local_anchor1.into_physx().into();
- let frame2 = params.local_anchor2.into_physx().into();
+ let frame1 = params.local_frame1.into_physx().into();
+ let frame2 = params.local_frame2.into_physx().into();
physx_sys::phys_PxFixedJointCreate(
physics.as_mut_ptr(),
@@ -500,7 +505,9 @@ impl PhysxWorld {
for coll_handle in rb.colliders() {
let collider = &mut colliders[*coll_handle];
- collider.set_position_debug(pos * collider.position_wrt_parent());
+ collider.set_position(
+ pos * collider.position_wrt_parent().copied().unwrap_or(na::one()),
+ );
}
}
}
@@ -511,7 +518,7 @@ fn physx_collider_from_rapier_collider(
cooking: &PxCooking,
collider: &Collider,
) -> Option<(Owner<PxShape>, Owner<PxMaterial>, Isometry3<f32>)> {
- let mut local_pose = *collider.position_wrt_parent();
+ let mut local_pose = collider.position_wrt_parent().copied().unwrap_or(na::one());
let shape = collider.shape();
let shape_flags = if collider.is_sensor() {
ShapeFlag::TriggerShape.into()