void FConstraintInstance::UpdateDriveTarget() { #if WITH_PHYSX if (PxD6Joint* PJoint = GetUnbrokenJoint()) { FQuat OrientationTargetQuat(AngularOrientationTarget); PJoint->setDrivePosition(PxTransform(U2PVector(LinearPositionTarget), U2PQuat(OrientationTargetQuat))); PJoint->setDriveVelocity(U2PVector(LinearVelocityTarget), U2PVector(RevolutionsToRads(AngularVelocityTarget))); } #endif }
void FConstraintInstance::UpdateDriveTarget() { #if WITH_PHYSX ExecuteOnUnbrokenJointReadWrite([&] (PxD6Joint* Joint) { FQuat OrientationTargetQuat(AngularOrientationTarget); Joint->setDrivePosition(PxTransform(U2PVector(LinearPositionTarget), U2PQuat(OrientationTargetQuat))); Joint->setDriveVelocity(U2PVector(LinearVelocityTarget), U2PVector(RevolutionsToRads(AngularVelocityTarget))); }); #endif }
/** Function for setting target angular velocity. */ void FConstraintInstance::SetAngularVelocityTarget(const FVector& InVelTarget) { // If settings are the same, don't do anything. if( AngularVelocityTarget == InVelTarget ) { return; } #if WITH_PHYSX if (PxD6Joint* Joint = ConstraintData) { PxVec3 CurrentLinearVel, CurrentAngVel; Joint->getDriveVelocity(CurrentLinearVel, CurrentAngVel); PxVec3 AngVel = U2PVector(RevolutionsToRads(InVelTarget)); Joint->setDriveVelocity(CurrentLinearVel, AngVel); } #endif AngularVelocityTarget = InVelTarget; }