use super::traits::Class;
#[rustfmt::skip]
use physx_sys::{
PxArticulationDrive,
PxArticulationJointReducedCoordinate_getJointType,
PxArticulationJointReducedCoordinate_setDriveParams_mut,
PxArticulationJointReducedCoordinate_setDriveTarget_mut,
PxArticulationJointReducedCoordinate_setJointType_mut,
PxArticulationJointReducedCoordinate_setLimitParams_mut,
PxArticulationJointReducedCoordinate_setMotion_mut,
PxArticulationLimit,
};
pub use physx_sys::{
PxArticulationAxis as ArticulationAxis, PxArticulationDriveType as ArticulationDriveType,
PxArticulationJointType as ArticulationJointType, PxArticulationMotion as ArticulationMotion,
};
#[repr(transparent)]
pub struct ArticulationJointReducedCoordinate {
obj: physx_sys::PxArticulationJointReducedCoordinate,
}
crate::DeriveClassForNewType!(
ArticulationJointReducedCoordinate: PxArticulationJointReducedCoordinate,
PxBase
);
unsafe impl Send for ArticulationJointReducedCoordinate {}
unsafe impl Sync for ArticulationJointReducedCoordinate {}
impl ArticulationJointReducedCoordinate {
#[inline]
pub fn set_drive_target(&mut self, rot: f32, axis: ArticulationAxis) {
unsafe {
PxArticulationJointReducedCoordinate_setDriveTarget_mut(
self.as_mut_ptr(),
axis,
rot,
true, )
};
}
#[inline]
pub fn set_joint_type(&mut self, joint_type: ArticulationJointType) {
unsafe {
PxArticulationJointReducedCoordinate_setJointType_mut(self.as_mut_ptr(), joint_type)
}
}
#[inline]
pub fn get_joint_type(&self) -> ArticulationJointType {
unsafe { PxArticulationJointReducedCoordinate_getJointType(self.as_ptr()) }
}
#[inline]
pub fn set_limit(&mut self, axis: ArticulationAxis, min: f32, max: f32) {
let limit = PxArticulationLimit {
low: min,
high: max,
};
unsafe {
PxArticulationJointReducedCoordinate_setLimitParams_mut(
self.as_mut_ptr(),
axis,
&limit,
);
}
}
#[inline]
pub fn set_drive(
&mut self,
axis: ArticulationAxis,
stiffness: f32,
damping: f32,
max_force: f32,
drive_type: ArticulationDriveType,
) {
let params = PxArticulationDrive {
stiffness,
damping,
maxForce: max_force,
driveType: drive_type,
};
unsafe {
PxArticulationJointReducedCoordinate_setDriveParams_mut(
self.as_mut_ptr(),
axis,
¶ms,
)
}
}
#[inline]
pub fn set_motion(&mut self, axis: ArticulationAxis, motion: ArticulationMotion) {
unsafe {
PxArticulationJointReducedCoordinate_setMotion_mut(self.as_mut_ptr(), axis, motion);
}
}
}