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_ACTOR
00032 #define PX_PHYSICS_NX_ACTOR
00033
00038 #include "PxPhysXConfig.h"
00039 #include "foundation/PxBounds3.h"
00040 #include "PxClient.h"
00041 #include "common/PxBase.h"
00042
00043 #if !PX_DOXYGEN
00044 namespace physx
00045 {
00046 #endif
00047
00048 class PxRigidActor;
00049 class PxRigidBody;
00050 class PxRigidStatic;
00051 class PxRigidDynamic;
00052 class PxParticleBase;
00053 class PxParticleSystem;
00054 class PxParticleFluid;
00055 class PxArticulation;
00056 class PxArticulationLink;
00057
00058
00060 typedef PxU8 PxDominanceGroup;
00061
00067 struct PxActorFlag
00068 {
00069 enum Enum
00070 {
00076 eVISUALIZATION = (1<<0),
00077
00081 eDISABLE_GRAVITY = (1<<1),
00082
00088 eSEND_SLEEP_NOTIFIES = (1<<2),
00089
00106 eDISABLE_SIMULATION = (1<<3)
00107 };
00108 };
00109
00115 typedef PxFlags<PxActorFlag::Enum,PxU8> PxActorFlags;
00116 PX_FLAGS_OPERATORS(PxActorFlag::Enum,PxU8)
00117
00118
00122 struct PxActorType
00123 {
00124 enum Enum
00125 {
00130 eRIGID_STATIC,
00131
00136 eRIGID_DYNAMIC,
00137
00138 #if PX_USE_PARTICLE_SYSTEM_API
00139
00144 ePARTICLE_SYSTEM PX_DEPRECATED,
00145
00151 ePARTICLE_FLUID PX_DEPRECATED,
00152 #endif
00153
00158 eARTICULATION_LINK,
00159
00160 #if PX_USE_CLOTH_API
00161
00166 eCLOTH PX_DEPRECATED,
00167 #endif
00168
00169
00170 eACTOR_COUNT,
00171
00172 eACTOR_FORCE_DWORD = 0x7fffffff
00173 };
00174 };
00175
00182 class PxActor : public PxBase
00183 {
00184 public:
00194 virtual void release() = 0;
00195
00203 virtual PxActorType::Enum getType() const = 0;
00204
00212 virtual PxScene* getScene() const = 0;
00213
00214
00215
00228 virtual void setName(const char* name) = 0;
00229
00237 virtual const char* getName() const = 0;
00238
00248 virtual PxBounds3 getWorldBounds(float inflation=1.01f) const = 0;
00249
00264 virtual void setActorFlag(PxActorFlag::Enum flag, bool value) = 0;
00271 virtual void setActorFlags( PxActorFlags inFlags ) = 0;
00272
00282 virtual PxActorFlags getActorFlags() const = 0;
00283
00300 virtual void setDominanceGroup(PxDominanceGroup dominanceGroup) = 0;
00301
00309 virtual PxDominanceGroup getDominanceGroup() const = 0;
00310
00311
00321 virtual void setOwnerClient( PxClientID inClient ) = 0;
00322
00330 virtual PxClientID getOwnerClient() const = 0;
00331
00347 PX_DEPRECATED virtual void setClientBehaviorFlags(PxActorClientBehaviorFlags) = 0;
00348
00358 PX_DEPRECATED virtual PxActorClientBehaviorFlags getClientBehaviorFlags() const = 0;
00359
00367 virtual PxAggregate* getAggregate() const = 0;
00368
00369
00370 void* userData;
00371
00372
00373 protected:
00374 PX_INLINE PxActor(PxType concreteType, PxBaseFlags baseFlags) : PxBase(concreteType, baseFlags), userData(NULL) {}
00375 PX_INLINE PxActor(PxBaseFlags baseFlags) : PxBase(baseFlags) {}
00376 virtual ~PxActor() {}
00377 virtual bool isKindOf(const char* name) const { return !::strcmp("PxActor", name) || PxBase::isKindOf(name); }
00378
00379
00380 };
00381
00382 #if !PX_DOXYGEN
00383 }
00384 #endif
00385
00387 #endif