98 void postSwitchToKinematic();
99 void postSwitchToDynamic();
101 PX_FORCE_INLINE const SimStateData* getSimStateData(
bool isKinematic)
const {
return (mSimStateData && (checkSimStateKinematicStatus(isKinematic)) ? mSimStateData : NULL); }
102 PX_FORCE_INLINE SimStateData* getSimStateData(
bool isKinematic) {
return (mSimStateData && (checkSimStateKinematicStatus(isKinematic)) ? mSimStateData : NULL); }
104 PX_FORCE_INLINE bool checkSimStateKinematicStatus(
const bool isKinematic)
const
106 PX_ASSERT(mSimStateData);
107 return mSimStateData->isKine() == isKinematic;
114 void clearSpatialAcceleration(
bool force,
bool torque);
116 void clearSpatialVelocity(
bool force,
bool torque);
118 void raiseVelocityModFlagAndNotify(VelocityModFlags flag);
119 PX_FORCE_INLINE void notifyAddSpatialAcceleration() { raiseVelocityModFlagAndNotify(VMF_ACC_DIRTY); }
120 PX_FORCE_INLINE void notifyClearSpatialAcceleration() { raiseVelocityModFlagAndNotify(VMF_ACC_DIRTY); }
121 PX_FORCE_INLINE void notifyAddSpatialVelocity() { raiseVelocityModFlagAndNotify(VMF_VEL_DIRTY); }
122 PX_FORCE_INLINE void notifyClearSpatialVelocity() { raiseVelocityModFlagAndNotify(VMF_VEL_DIRTY); }
126 void updateContactDistance(PxReal* contactDistance,
const PxReal dt,
const Bp::BoundsArray& boundsArray);
131 virtual void postActorFlagChange(PxU32 oldFlags, PxU32 newFlags);
132 void postBody2WorldChange();
133 void postSetWakeCounter(PxReal t,
bool forceWakeUp);
134 void postPosePreviewChange(
const PxU32 posePreviewFlag);
143 void disableCompound();
145 static PxU32 getRigidBodyOffset() {
return PxU32(PX_OFFSET_OF_RT(
BodySim, mLLBody));}
147 virtual void activate();
148 virtual void deactivate();
168 void calculateKinematicVelocity(PxReal oneOverDt);
169 void updateKinematicPose();
170 bool deactivateKinematic();
178 virtual void internalWakeUp(PxReal wakeCounterValue);
179 void internalWakeUpArticulationLink(PxReal wakeCounterValue);
181 PxReal updateWakeCounter(PxReal dt, PxReal energyThreshold,
const Cm::SpatialVector& motionVelocity);
183 void resetSleepFilter();
184 void notifyReadyForSleeping();
185 void notifyNotReadyForSleeping();
188 virtual void registerCountedInteraction() { mLLBody.getCore().numCountedInteractions++; PX_ASSERT(mLLBody.getCore().numCountedInteractions); }
189 virtual void unregisterCountedInteraction() { PX_ASSERT(mLLBody.getCore().numCountedInteractions); mLLBody.getCore().numCountedInteractions--; }
190 virtual PxU32 getNumCountedInteractions()
const {
return mLLBody.getCore().numCountedInteractions; }
192 PX_FORCE_INLINE PxIntBool isFrozen()
const {
return PxIntBool(mLLBody.mInternalFlags & PxsRigidBody::eFROZEN); }
202 void updateForces(PxReal dt,
PxsRigidBody** updatedBodySims, PxU32* updatedBodyNodeIndices,
205 PX_FORCE_INLINE bool readVelocityModFlag(VelocityModFlags f) {
return (mVelModState & f) != 0; }
207 PX_FORCE_INLINE void raiseVelocityModFlag(VelocityModFlags f) { mVelModState |= f; }
208 PX_FORCE_INLINE void clearVelocityModFlag(VelocityModFlags f) { mVelModState &= ~f; }
220 PX_FORCE_INLINE PxU32 getFlagsFast()
const {
return getBodyCore().getFlags(); }
225 void setArticulation(
ArticulationSim* a, PxReal wakeCounter,
bool asleep, PxU32 bodyIndex);
229 PX_FORCE_INLINE void onConstraintAttach() { raiseInternalFlag(BF_HAS_CONSTRAINTS); registerCountedInteraction(); }
230 void onConstraintDetach();
234 PX_ASSERT(!mSimStateData || checkSimStateKinematicStatus(isKinematic));
235 mLLBody.mLastTransform.p -= shift;
236 if (mSimStateData && isKinematic && mSimStateData->getKinematicData()->targetValid)
237 mSimStateData->getKinematicData()->targetPose.p -= shift;
240 PX_FORCE_INLINE bool notInScene()
const {
return mActiveListIndex == SC_NOT_IN_SCENE_INDEX; }
245 return (getFlagsFast()&ktFlags) == ktFlags;
248 PX_FORCE_INLINE PxU32 getNbShapes()
const {
return mShapes.getCount(); }
250 void createSqBounds();
251 void destroySqBounds();
253 void invalidateSqBounds();
Definition PxsRigidBody.h:43
Definition ScBodyCore.h:49
Definition ScBodySim.h:60
@ eFORCE_KINE_KINE_NOTIFICATIONS
Forces kinematic-kinematic pairs notifications for this actor.
Definition PxRigidBody.h:157
@ eFORCE_STATIC_KINE_NOTIFICATIONS
Forces static-kinematic pairs notifications for this actor.
Definition PxRigidBody.h:170
@ eUSE_KINEMATIC_TARGET_FOR_SCENE_QUERIES
Use the kinematic target transform for scene queries.
Definition PxRigidBody.h:85
@ eRETAIN_ACCELERATIONS
Carries over forces/accelerations between frames, rather than clearing them.
Definition PxRigidBody.h:137
@ eKINEMATIC
Enables kinematic mode for the actor.
Definition PxRigidBody.h:74