mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-20 04:34:48 +00:00
PhysicsShape applyTorque function
This commit is contained in:
parent
f42c9bd9b7
commit
55e9af9786
|
|
@ -356,6 +356,17 @@ void BtBody::applyImpulse( const Point3F &origin, const Point3F &force )
|
|||
mActor->activate();
|
||||
}
|
||||
|
||||
void BtBody::applyTorque(const Point3F &torque)
|
||||
{
|
||||
AssertFatal(mActor, "BtBody::applyTorque - The actor is null!");
|
||||
AssertFatal(isDynamic(), "BtBody::applyTorque - This call is only for dynamics!");
|
||||
|
||||
mActor->applyTorque( btCast<btVector3>(torque) );
|
||||
|
||||
if (!mActor->isActive())
|
||||
mActor->activate();
|
||||
}
|
||||
|
||||
Box3F BtBody::getWorldBounds()
|
||||
{
|
||||
btVector3 min, max;
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ public:
|
|||
F32 staticFriction );
|
||||
virtual void applyCorrection( const MatrixF &xfm );
|
||||
virtual void applyImpulse( const Point3F &origin, const Point3F &force );
|
||||
|
||||
virtual void applyTorque(const Point3F &torque);
|
||||
virtual void findContact(SceneObject **contactObject, VectorF *contactNormal, Vector<SceneObject*> *outOverlapObjects) const;
|
||||
virtual void moveKinematicTo(const MatrixF &xfm);
|
||||
|
||||
|
|
|
|||
|
|
@ -114,6 +114,10 @@ public:
|
|||
///
|
||||
virtual void applyImpulse( const Point3F &origin, const Point3F &force ) = 0;
|
||||
|
||||
///
|
||||
virtual void applyTorque(const Point3F &torque) = 0;
|
||||
|
||||
|
||||
virtual void findContact(SceneObject **contactObject,
|
||||
VectorF *contactNormal,
|
||||
Vector<SceneObject*> *outOverlapObjects) const = 0;
|
||||
|
|
|
|||
|
|
@ -857,6 +857,12 @@ void PhysicsShape::applyImpulse( const Point3F &pos, const VectorF &vec )
|
|||
mPhysicsRep->applyImpulse( pos, vec );
|
||||
}
|
||||
|
||||
void PhysicsShape::applyTorque( const Point3F &torque )
|
||||
{
|
||||
if (mPhysicsRep && mPhysicsRep->isDynamic())
|
||||
mPhysicsRep->applyTorque( torque );
|
||||
}
|
||||
|
||||
void PhysicsShape::applyRadialImpulse( const Point3F &origin, F32 radius, F32 magnitude )
|
||||
{
|
||||
if ( !mPhysicsRep || !mPhysicsRep->isDynamic() )
|
||||
|
|
@ -1179,4 +1185,12 @@ DefineEngineMethod( PhysicsShape, restore, void, (),,
|
|||
"Has no effect if the shape is not destroyed.\n\n")
|
||||
{
|
||||
object->restore();
|
||||
}
|
||||
|
||||
DefineEngineMethod( PhysicsShape, applyTorque, void, (Point3F torque), ,
|
||||
"@brief Add a torque to a dynamic physics shape.\n\n"
|
||||
"@param torque to apply to the dynamic physics shape\n"
|
||||
"@note This value is ignored on physics shapes that are not dynamic. Wakes up the dynamic physics shape if it is sleeping.\n")
|
||||
{
|
||||
object->applyTorque( torque );
|
||||
}
|
||||
|
|
@ -246,6 +246,7 @@ public:
|
|||
Point3F getVelocity() const { return mState.linVelocity; }
|
||||
void applyImpulse( const Point3F &pos, const VectorF &vec );
|
||||
void applyRadialImpulse( const Point3F &origin, F32 radius, F32 magnitude );
|
||||
void applyTorque( const Point3F &torque );
|
||||
void setScale(const VectorF & scale);
|
||||
|
||||
// GameBase
|
||||
|
|
|
|||
|
|
@ -417,6 +417,16 @@ void Px3Body::applyImpulse( const Point3F &origin, const Point3F &force )
|
|||
|
||||
}
|
||||
|
||||
void Px3Body::applyTorque( const Point3F &torque )
|
||||
{
|
||||
AssertFatal(mActor, "Px3Body::applyImpulse - The actor is null!");
|
||||
|
||||
mWorld->releaseWriteLock();
|
||||
physx::PxRigidDynamic *actor = mActor->is<physx::PxRigidDynamic>();
|
||||
if (mIsEnabled && isDynamic())
|
||||
actor->addTorque( px3Cast<physx::PxVec3>(torque), physx::PxForceMode::eFORCE, true);
|
||||
}
|
||||
|
||||
void Px3Body::findContact(SceneObject **contactObject,
|
||||
VectorF *contactNormal,
|
||||
Vector<SceneObject*> *outOverlapObjects) const
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ public:
|
|||
F32 staticFriction );
|
||||
virtual void applyCorrection( const MatrixF &xfm );
|
||||
virtual void applyImpulse( const Point3F &origin, const Point3F &force );
|
||||
|
||||
virtual void applyTorque( const Point3F &torque );
|
||||
virtual void findContact(SceneObject **contactObject, VectorF *contactNormal,
|
||||
Vector<SceneObject*> *outOverlapObjects) const;
|
||||
virtual void moveKinematicTo(const MatrixF &xfm);
|
||||
|
|
|
|||
Loading…
Reference in a new issue