diff --git a/Engine/source/T3D/physics/bullet/btBody.cpp b/Engine/source/T3D/physics/bullet/btBody.cpp index 0c37de0c5..77c3b8115 100644 --- a/Engine/source/T3D/physics/bullet/btBody.cpp +++ b/Engine/source/T3D/physics/bullet/btBody.cpp @@ -335,16 +335,22 @@ void BtBody::applyImpulse( const Point3F &origin, const Point3F &force ) AssertFatal( mActor, "BtBody::applyImpulse - The actor is null!" ); AssertFatal( isDynamic(), "BtBody::applyImpulse - This call is only for dynamics!" ); + // Convert the world position to local + MatrixF trans = btCast( mActor->getCenterOfMassTransform() ); + trans.inverse(); + Point3F localOrigin( origin ); + trans.mulP( localOrigin ); + if ( mCenterOfMass ) { - Point3F relOrigin( origin ); + Point3F relOrigin( localOrigin ); mCenterOfMass->mulP( relOrigin ); Point3F relForce( force ); mCenterOfMass->mulV( relForce ); mActor->applyImpulse( btCast( relForce ), btCast( relOrigin ) ); } else - mActor->applyImpulse( btCast( force ), btCast( origin ) ); + mActor->applyImpulse( btCast( force ), btCast( localOrigin ) ); if ( !mActor->isActive() ) mActor->activate();