00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef PX_PHYSICS_NX_RIGIDDYNAMIC
00032 #define PX_PHYSICS_NX_RIGIDDYNAMIC
00033
00037 #include "PxRigidBody.h"
00038
00039 #if !PX_DOXYGEN
00040 namespace physx
00041 {
00042 #endif
00043
00044
00050 struct PxRigidDynamicLockFlag
00051 {
00052 enum Enum
00053 {
00054 eLOCK_LINEAR_X = (1 << 0),
00055 eLOCK_LINEAR_Y = (1 << 1),
00056 eLOCK_LINEAR_Z = (1 << 2),
00057 eLOCK_ANGULAR_X = (1 << 3),
00058 eLOCK_ANGULAR_Y = (1 << 4),
00059 eLOCK_ANGULAR_Z = (1 << 5)
00060 };
00061 };
00062
00063 typedef PxFlags<PxRigidDynamicLockFlag::Enum, PxU16> PxRigidDynamicLockFlags;
00064 PX_FLAGS_OPERATORS(PxRigidDynamicLockFlag::Enum, PxU16)
00065
00066
00083 class PxRigidDynamic : public PxRigidBody
00084 {
00085 public:
00086
00087
00088
00089
00117 virtual void setKinematicTarget(const PxTransform& destination) = 0;
00118
00127 virtual bool getKinematicTarget(PxTransform& target) const = 0;
00128
00139 virtual void setKinematicSurfaceVelocity(const PxVec3& linearVelocity, const PxVec3& angularVelocity) = 0;
00140
00146 virtual void clearKinematicSurfaceVelocity() = 0;
00147
00148
00149
00187 virtual bool isSleeping() const = 0;
00188
00189
00201 virtual void setSleepThreshold(PxReal threshold) = 0;
00202
00210 virtual PxReal getSleepThreshold() const = 0;
00211
00225 virtual void setStabilizationThreshold(PxReal threshold) = 0;
00226
00236 virtual PxReal getStabilizationThreshold() const = 0;
00237
00238
00248 virtual PxRigidDynamicLockFlags getRigidDynamicLockFlags() const = 0;
00249
00263 virtual void setRigidDynamicLockFlag(PxRigidDynamicLockFlag::Enum flag, bool value) = 0;
00264 virtual void setRigidDynamicLockFlags(PxRigidDynamicLockFlags flags) = 0;
00265
00266
00267
00288 virtual void setWakeCounter(PxReal wakeCounterValue) = 0;
00289
00297 virtual PxReal getWakeCounter() const = 0;
00298
00313 virtual void wakeUp() = 0;
00314
00329 virtual void putToSleep() = 0;
00330
00331
00332
00351 virtual void setSolverIterationCounts(PxU32 minPositionIters, PxU32 minVelocityIters = 1) = 0;
00352
00358 virtual void getSolverIterationCounts(PxU32& minPositionIters, PxU32& minVelocityIters) const = 0;
00359
00379 virtual PxReal getContactReportThreshold() const = 0;
00380
00390 virtual void setContactReportThreshold(PxReal threshold) = 0;
00391
00392 virtual const char* getConcreteTypeName() const { return "PxRigidDynamic"; }
00393
00394 protected:
00395 PX_INLINE PxRigidDynamic(PxType concreteType, PxBaseFlags baseFlags) : PxRigidBody(concreteType, baseFlags) {}
00396 PX_INLINE PxRigidDynamic(PxBaseFlags baseFlags) : PxRigidBody(baseFlags) {}
00397 virtual ~PxRigidDynamic() {}
00398 virtual bool isKindOf(const char* name) const { return !::strcmp("PxRigidDynamic", name) || PxRigidBody::isKindOf(name); }
00399
00400 };
00401
00402 #if !PX_DOXYGEN
00403 }
00404 #endif
00405
00407 #endif