PxController.h
Go to the documentation of this file.
1 //
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions
4 // are met:
5 // * Redistributions of source code must retain the above copyright
6 // notice, this list of conditions and the following disclaimer.
7 // * Redistributions in binary form must reproduce the above copyright
8 // notice, this list of conditions and the following disclaimer in the
9 // documentation and/or other materials provided with the distribution.
10 // * Neither the name of NVIDIA CORPORATION nor the names of its
11 // contributors may be used to endorse or promote products derived
12 // from this software without specific prior written permission.
13 //
14 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
15 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 //
26 // Copyright (c) 2008-2018 NVIDIA Corporation. All rights reserved.
27 // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
28 // Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
29 
30 
31 
32 #ifndef PX_PHYSICS_CCT_CONTROLLER
33 #define PX_PHYSICS_CCT_CONTROLLER
34 
41 #include "PxQueryFiltering.h"
43 
44 #if !PX_DOXYGEN
45 namespace physx
46 {
47 #endif
48 
53 {
54  enum Enum
55  {
62 
69 
70  eFORCE_DWORD = 0x7fffffff
71  };
72 };
73 
74 class PxShape;
75 class PxScene;
76 class PxController;
77 class PxRigidDynamic;
78 class PxMaterial;
79 struct PxFilterData;
82 class PxObstacleContext;
83 class PxObstacle;
84 
91 {
92  enum Enum
93  {
95  ePREVENT_CLIMBING_AND_FORCE_SLIDING
96  };
97 };
98 
103 {
104  enum Enum
105  {
106  eCOLLISION_SIDES = (1<<0),
107  eCOLLISION_UP = (1<<1),
108  eCOLLISION_DOWN = (1<<2)
109  };
110 };
111 
118 PX_FLAGS_OPERATORS(PxControllerCollisionFlag::Enum, PxU8)
119 
120 
121 
125 {
129  ObstacleHandle touchedObstacleHandle; // Obstacle on which the CCT is standing
133  bool isMovingUp;
134 };
135 
140 {
145 };
146 
151 {
157 };
158 
165 {
169 };
170 
177 {
179 };
180 
187 {
188  const void* userData;
189 };
190 
199 {
200 public:
201 
211  virtual void onShapeHit(const PxControllerShapeHit& hit) = 0;
212 
220  virtual void onControllerHit(const PxControllersHit& hit) = 0;
221 
229  virtual void onObstacleHit(const PxControllerObstacleHit& hit) = 0;
230 
231 protected:
233 };
234 
235 
248 {
249 public:
251 
259  virtual bool filter(const PxController& a, const PxController& b) = 0;
260 };
261 
280 {
281  public:
282 
283  PX_INLINE PxControllerFilters(const PxFilterData* filterData=NULL, PxQueryFilterCallback* cb=NULL, PxControllerFilterCallback* cctFilterCb=NULL) :
284  mFilterData (filterData),
285  mFilterCallback (cb),
286  mFilterFlags (PxQueryFlag::eSTATIC|PxQueryFlag::eDYNAMIC|PxQueryFlag::ePREFILTER),
287  mCCTFilterCallback (cctFilterCb)
288  {}
289 
290  // CCT-vs-shapes:
292  PxQueryFilterCallback* mFilterCallback;
295  // CCT-vs-CCT:
297 };
298 
305 {
306 public:
307 
313  PX_INLINE virtual bool isValid() const;
314 
323 
332 
342 
358 
371 
396 
409 
422 
431 
441 
451 
464 
477 
488 
499 
512 
518  void* userData;
519 
520 protected:
522 
527  PX_INLINE virtual ~PxControllerDesc();
528 
533 
537  PX_INLINE PxControllerDesc& operator=(const PxControllerDesc&);
538 
539  PX_INLINE void copy(const PxControllerDesc&);
540 };
541 
543 {
544  upDirection = PxVec3(0.0f, 1.0f, 0.0f);
545  slopeLimit = 0.707f;
546  contactOffset = 0.1f;
547  stepOffset = 0.5f;
548  density = 10.0f;
549  scaleCoeff = 0.8f;
550  volumeGrowth = 1.5f;
551  reportCallback = NULL;
552  behaviorCallback = NULL;
553  userData = NULL;
555  position.x = PxExtended(0.0);
556  position.y = PxExtended(0.0);
557  position.z = PxExtended(0.0);
558  material = NULL;
559  invisibleWallHeight = 0.0f;
560  maxJumpHeight = 0.0f;
562 }
563 
565 {
566  copy(other);
567 }
568 
570 {
571  copy(other);
572  return *this;
573 }
574 
576 {
577  upDirection = other.upDirection;
578  slopeLimit = other.slopeLimit;
580  stepOffset = other.stepOffset;
581  density = other.density;
582  scaleCoeff = other.scaleCoeff;
583  volumeGrowth = other.volumeGrowth;
586  userData = other.userData;
588  position.x = other.position.x;
589  position.y = other.position.y;
590  position.z = other.position.z;
591  material = other.material;
595 }
596 
598 {
599 }
600 
602 {
605  return false;
606  if(scaleCoeff<0.0f) return false;
607  if(volumeGrowth<1.0f) return false;
608  if(density<0.0f) return false;
609  if(slopeLimit<0.0f) return false;
610  if(stepOffset<0.0f) return false;
611  if(contactOffset<=0.0f) return false;
612  if(!material) return false;
613 
614  return true;
615 }
616 
617 
624 {
625 public:
626  //*********************************************************************
627  // DEPRECATED FUNCTIONS:
628  //
629  // PX_DEPRECATED virtual void setInteraction(PxCCTInteractionMode::Enum flag) = 0;
630  // PX_DEPRECATED virtual PxCCTInteractionMode::Enum getInteraction() const = 0;
631  // PX_DEPRECATED virtual void setGroupsBitmask(PxU32 bitmask) = 0;
632  // PX_DEPRECATED virtual PxU32 getGroupsBitmask() const = 0;
633  //
634  // => replaced with:
635  //
636  // PxControllerFilters::mCCTFilterCallback. Please define a PxControllerFilterCallback object and emulate the old interaction mode there.
637  //
638  //*********************************************************************
639 
645  virtual PxControllerShapeType::Enum getType() const = 0;
646 
650  virtual void release() = 0;
651 
663  virtual PxControllerCollisionFlags move(const PxVec3& disp, PxF32 minDist, PxF32 elapsedTime, const PxControllerFilters& filters, const PxObstacleContext* obstacles=NULL) = 0;
664 
680  virtual bool setPosition(const PxExtendedVec3& position) = 0;
681 
695  virtual const PxExtendedVec3& getPosition() const = 0;
696 
713  virtual bool setFootPosition(const PxExtendedVec3& position) = 0;
714 
724  virtual PxExtendedVec3 getFootPosition() const = 0;
725 
733  virtual PxRigidDynamic* getActor() const = 0;
734 
742  virtual void setStepOffset(const PxF32 offset) =0;
743 
751  virtual PxF32 getStepOffset() const =0;
752 
761 
770 
778  virtual PxF32 getContactOffset() const =0;
779 
787  virtual void setContactOffset(PxF32 offset) =0;
788 
796  virtual PxVec3 getUpDirection() const =0;
797 
805  virtual void setUpDirection(const PxVec3& up) =0;
806 
814  virtual PxF32 getSlopeLimit() const =0;
815 
827  virtual void setSlopeLimit(PxF32 slopeLimit) =0;
828 
844  virtual void invalidateCache() = 0;
845 
851  virtual PxScene* getScene() = 0;
852 
860  virtual void* getUserData() const = 0;
861 
869  virtual void setUserData(void* userData) = 0;
870 
878  virtual void getState(PxControllerState& state) const = 0;
879 
887  virtual void getStats(PxControllerStats& stats) const = 0;
888 
899  virtual void resize(PxReal height) = 0;
900 
901 protected:
903  virtual ~PxController() {}
904 };
905 
906 #if !PX_DOXYGEN
907 } // namespace physx
908 #endif
909 
911 #endif
bool standOnObstacle
Are we standing on a user-defined obstacle?
Definition: PxController.h:132
PxVec3 deltaXP
delta position vector for the object the CCT is standing/riding on. Not always match the CCT delta wh...
Definition: PxController.h:126
Definition: GuContactBuffer.h:37
PxF32 volumeGrowth
Cached volume growth.
Definition: PxController.h:450
PxExtendedVec3 worldPos
Contact position in world space.
Definition: PxController.h:153
PxControllerBehaviorCallback * behaviorCallback
Specifies a user behavior callback.
Definition: PxController.h:476
virtual PxF32 getStepOffset() const =0
Retrieve the step height.
A scene is a collection of bodies and constraints which can interact.
Definition: PxScene.h:169
PxController * other
Touched controller.
Definition: PxController.h:178
const void * userData
Definition: PxController.h:188
PxU32 collisionFlags
Last known collision flags (PxControllerCollisionFlag)
Definition: PxController.h:130
Scene query filtering callbacks.
Definition: PxQueryFiltering.h:169
PxControllerFilterCallback * mCCTFilterCallback
CCT-vs-CCT filter callback. If NULL, all CCT-vs-CCT collisions are kept.
Definition: PxController.h:296
PxControllerNonWalkableMode::Enum nonWalkableMode
The non-walkable mode controls if a character controller slides or not on a non-walkable part...
Definition: PxController.h:487
PxRigidDynamic represents a dynamic rigid simulation object in the physics SDK.
Definition: PxRigidDynamic.h:83
float PxF32
Definition: PxSimpleTypes.h:76
PxFilterData is user-definable data which gets passed into the collision filtering shader and/or call...
Definition: PxFiltering.h:366
PxRigidActor * actor
Touched actor.
Definition: PxController.h:167
virtual PX_INLINE bool isValid() const
returns true if the current settings are valid
Definition: PxController.h:601
Abstract class for collision shapes.
Definition: PxShape.h:142
float PxReal
Definition: PxSimpleTypes.h:78
A box controller.
Definition: PxController.h:61
PX_INLINE PxControllerDesc(PxControllerShapeType::Enum)
constructor sets to default.
Definition: PxController.h:542
Stops character from climbing up non-walkable slopes, but doesn&#39;t move it otherwise.
Definition: PxController.h:94
Describes a generic CCT hit.
Definition: PxController.h:150
PxQueryFlags mFilterFlags
Flags for internal PxQueryFilterData structure. Passed to PxScene::overlap() call.
Definition: PxController.h:294
PxVec3 upDirection
Specifies the &#39;up&#39; direction.
Definition: PxController.h:341
virtual void getStats(PxControllerStats &stats) const =0
Returns the controller&#39;s internal statistics.
PxExtended y
Definition: PxExtended.h:253
virtual void invalidateCache()=0
Flushes internal geometry cache.
virtual void setContactOffset(PxF32 offset)=0
Sets the contact offset.
User callback class for character controller events.
Definition: PxController.h:198
PX_INLINE PxControllerFilters(const PxFilterData *filterData=NULL, PxQueryFilterCallback *cb=NULL, PxControllerFilterCallback *cctFilterCb=NULL)
Definition: PxController.h:283
PX_INLINE PxController()
Definition: PxController.h:902
PxF32 scaleCoeff
Scale coefficient for underlying kinematic actor.
Definition: PxController.h:440
PxF32 slopeLimit
The maximum slope which the character can walk up.
Definition: PxController.h:357
virtual ~PxUserControllerHitReport()
Definition: PxController.h:232
PxF32 stepOffset
Defines the maximum height of an obstacle which the character can climb.
Definition: PxController.h:421
virtual PxControllerCollisionFlags move(const PxVec3 &disp, PxF32 minDist, PxF32 elapsedTime, const PxControllerFilters &filters, const PxObstacleContext *obstacles=NULL)=0
Moves the character using a "collide-and-slide" algorithm.
PxF32 invisibleWallHeight
Height of invisible walls created around non-walkable triangles.
Definition: PxController.h:370
virtual ~PxController()
Definition: PxController.h:903
virtual void * getUserData() const =0
Returns the user data associated with this controller.
PxU16 nbPartialUpdates
Definition: PxController.h:143
virtual PxF32 getContactOffset() const =0
Retrieve the contact offset.
virtual PxControllerShapeType::Enum getType() const =0
Return the type of controller.
virtual void setUserData(void *userData)=0
Sets the user data associated with this controller.
virtual PxF32 getSlopeLimit() const =0
Retrieve the slope limit.
PxMaterial * material
The material for the actor associated with the controller.
Definition: PxController.h:498
PxRigidActor represents a base class shared between dynamic and static rigid bodies in the physics SD...
Definition: PxRigidActor.h:58
virtual ~PxControllerFilterCallback()
Definition: PxController.h:250
virtual void setStepOffset(const PxF32 offset)=0
The step height.
virtual const PxExtendedVec3 & getPosition() const =0
Retrieve the raw position of the controller.
Enum
Definition: PxController.h:92
Dedicated filtering callback for CCT vs CCT.
Definition: PxController.h:247
virtual PX_INLINE ~PxControllerDesc()
Definition: PxController.h:597
Context class for obstacles.
Definition: PxControllerObstacles.h:115
PxF32 length
Motion length.
Definition: PxController.h:156
PxF32 density
Density of underlying kinematic actor.
Definition: PxController.h:430
PxExtended x
Definition: PxExtended.h:253
PxU16 nbIterations
Definition: PxController.h:141
const PxControllerShapeType::Enum mType
The type of the controller. This gets set by the derived class&#39; ctor, the user should not have to cha...
Definition: PxController.h:521
PxShape * touchedShape
Shape on which the CCT is standing.
Definition: PxController.h:127
virtual void setNonWalkableMode(PxControllerNonWalkableMode::Enum flag)=0
Sets the non-walkable mode for the CCT.
Base class for character controllers.
Definition: PxController.h:623
A capsule controller.
Definition: PxController.h:68
PX_INLINE PxControllerShapeType::Enum getType() const
Returns the character controller type.
Definition: PxController.h:322
bool standOnAnotherCCT
Are we standing on another CCT?
Definition: PxController.h:131
PX_INLINE PxControllerDesc & operator=(const PxControllerDesc &)
assignment operator.
Definition: PxController.h:569
virtual void setUpDirection(const PxVec3 &up)=0
Sets the &#39;up&#39; direction.
PxF32 maxJumpHeight
Maximum height a jumping character can reach.
Definition: PxController.h:395
PxExtended z
Definition: PxExtended.h:253
PxVec3 worldNormal
Contact normal in world space.
Definition: PxController.h:154
uint8_t PxU8
Definition: PxSimpleTypes.h:75
virtual bool setPosition(const PxExtendedVec3 &position)=0
Sets controller&#39;s position.
Base class for obstacles.
Definition: PxControllerObstacles.h:54
PxU16 nbFullUpdates
Definition: PxController.h:142
PxShape * shape
Touched shape.
Definition: PxController.h:166
void * userData
User specified data associated with the controller.
Definition: PxController.h:518
PxU32 ObstacleHandle
Definition: PxControllerObstacles.h:106
virtual void release()=0
Releases the controller.
double PxExtended
Definition: PxExtended.h:52
PxU16 nbTessellation
Definition: PxController.h:144
PxRigidActor * touchedActor
Actor owning &#39;touchedShape&#39;.
Definition: PxController.h:128
specifies which sides a character is colliding with.
Definition: PxController.h:102
virtual bool setFootPosition(const PxExtendedVec3 &position)=0
Set controller&#39;s foot position.
bool isMovingUp
is CCT moving up or not? (i.e. explicit jumping)
Definition: PxController.h:133
virtual PxRigidDynamic * getActor() const =0
Get the rigid body actor associated with this controller (see PhysX documentation). The behavior upon manually altering this actor is undefined, you should primarily use it for reading const properties.
The type of controller, eg box, sphere or capsule.
Definition: PxController.h:52
User behavior callback.
Definition: PxControllerBehavior.h:74
virtual void getState(PxControllerState &state) const =0
Returns information about the controller&#39;s internal state.
specifies how a CCT interacts with non-walkable parts.
Definition: PxController.h:90
virtual PxScene * getScene()=0
Retrieve the scene associated with the controller.
Filtering flags for scene queries.
Definition: PxQueryFiltering.h:57
PxVec3 dir
Motion direction.
Definition: PxController.h:155
virtual void resize(PxReal height)=0
Resizes the controller.
Describes a hit between a CCT and a shape. Passed to onShapeHit()
Definition: PxController.h:164
Material class to represent a set of surface properties.
Definition: PxMaterial.h:130
ObstacleHandle touchedObstacleHandle
Definition: PxController.h:129
virtual PxExtendedVec3 getFootPosition() const =0
Retrieve the "foot" position of the controller, i.e. the position of the bottom of the CCT&#39;s shape...
Container for bitfield flag variables associated with a specific enum type.
Definition: PxFlags.h:73
Describes a hit between a CCT and a user-defined obstacle. Passed to onObstacleHit().
Definition: PxController.h:186
Enum
Definition: PxController.h:104
PxF32 contactOffset
The contact offset used by the controller.
Definition: PxController.h:408
PxController * controller
Current controller.
Definition: PxController.h:152
Filtering data for "move" call.
Definition: PxController.h:279
uint16_t PxU16
Definition: PxSimpleTypes.h:73
uint32_t PxU32
Definition: Px.h:48
Describes a controller&#39;s internal state.
Definition: PxController.h:124
virtual void setSlopeLimit(PxF32 slopeLimit)=0
Sets the slope limit.
PxExtendedVec3 position
The position of the character.
Definition: PxController.h:331
virtual PxControllerNonWalkableMode::Enum getNonWalkableMode() const =0
Retrieves the non-walkable mode for the CCT.
Descriptor class for a character controller.
Definition: PxController.h:304
Describes a controller&#39;s internal statistics.
Definition: PxController.h:139
const PxFilterData * mFilterData
Definition: PxController.h:291
PxFlags< PxControllerCollisionFlag::Enum, PxU8 > PxControllerCollisionFlags
Bitfield that contains a set of raised flags defined in PxControllerCollisionFlag.
Definition: PxController.h:117
#define PX_INLINE
Definition: PxPreprocessor.h:349
virtual PxVec3 getUpDirection() const =0
Retrieve the &#39;up&#39; direction.
Enum
Definition: PxController.h:54
bool registerDeletionListener
Use a deletion listener to get informed about released objects and clear internal caches if needed...
Definition: PxController.h:511
3 Element vector class.
Definition: PxVec3.h:49
PX_INLINE void copy(const PxControllerDesc &)
Definition: PxController.h:575
Describes a hit between a CCT and another CCT. Passed to onControllerHit().
Definition: PxController.h:176
PxU32 triangleIndex
touched triangle index (only for meshes/heightfields)
Definition: PxController.h:168
PxUserControllerHitReport * reportCallback
Specifies a user report callback.
Definition: PxController.h:463
Definition: PxExtended.h:56