BsPhysXCharacterController.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsPhysXPrerequisites.h"
  5. #include "BsCharacterController.h"
  6. #include "PxPhysics.h"
  7. #include "characterkinematic\PxCapsuleController.h"
  8. namespace BansheeEngine
  9. {
  10. /** @addtogroup PhysX
  11. * @{
  12. */
  13. /** PhysX specific implementation if a CharacterController. */
  14. class PhysXCharacterController : public CharacterController
  15. , physx::PxUserControllerHitReport
  16. , physx::PxQueryFilterCallback
  17. , physx::PxControllerFilterCallback
  18. {
  19. public:
  20. PhysXCharacterController(physx::PxControllerManager* manager, const CHAR_CONTROLLER_DESC& desc);
  21. ~PhysXCharacterController();
  22. /** @copydoc CharacterController::move */
  23. CharacterCollisionFlags move(const Vector3& displacement) override;
  24. /** @copydoc CharacterController::getPosition */
  25. Vector3 getPosition() const override;
  26. /** @copydoc CharacterController::setPosition */
  27. void setPosition(const Vector3& position) override;
  28. /** @copydoc CharacterController::getFootPosition */
  29. Vector3 getFootPosition() const override;
  30. /** @copydoc CharacterController::setFootPosition */
  31. void setFootPosition(const Vector3& position) override;
  32. /** @copydoc CharacterController::getRadius */
  33. float getRadius() const override;
  34. /** @copydoc CharacterController::setRadius */
  35. void setRadius(float radius) override;
  36. /** @copydoc CharacterController::getHeight */
  37. float getHeight() const override;
  38. /** @copydoc CharacterController::setHeight */
  39. void setHeight(float height) override;
  40. /** @copydoc CharacterController::getUp */
  41. Vector3 getUp() const override;
  42. /** @copydoc CharacterController::setUp */
  43. void setUp(const Vector3& up) override;
  44. /** @copydoc CharacterController::getClimbingMode */
  45. CharacterClimbingMode getClimbingMode() const override;
  46. /** @copydoc CharacterController::setClimbingMode */
  47. void setClimbingMode(CharacterClimbingMode mode) override;
  48. /** @copydoc CharacterController::getNonWalkableMode */
  49. CharacterNonWalkableMode getNonWalkableMode() const override;
  50. /** @copydoc CharacterController::setNonWalkableMode */
  51. void setNonWalkableMode(CharacterNonWalkableMode mode) override;
  52. /** @copydoc CharacterController::getMinMoveDistance */
  53. float getMinMoveDistance() const override;
  54. /** @copydoc CharacterController::setMinMoveDistance */
  55. void setMinMoveDistance(float value) override;
  56. /** @copydoc CharacterController::getContactOffset */
  57. float getContactOffset() const override;
  58. /** @copydoc CharacterController::setContactOffset */
  59. void setContactOffset(float value) override;
  60. /** @copydoc CharacterController::getStepOffset */
  61. float getStepOffset() const override;
  62. /** @copydoc CharacterController::setStepOffset */
  63. void setStepOffset(float value) override;
  64. /** @copydoc CharacterController::getSlopeLimit */
  65. Radian getSlopeLimit() const override;
  66. /** @copydoc CharacterController::setSlopeLimit */
  67. void setSlopeLimit(Radian value) override;
  68. private:
  69. /** @copydoc physx::PxUserControllerHitReport::onShapeHit */
  70. void onShapeHit(const physx::PxControllerShapeHit& hit) override;
  71. /** @copydoc physx::PxUserControllerHitReport::onControllerHit */
  72. void onControllerHit(const physx::PxControllersHit& hit) override;
  73. /** @copydoc physx::PxUserControllerHitReport::onObstacleHit */
  74. void onObstacleHit(const physx::PxControllerObstacleHit& hit) override { /* Do nothing */ };
  75. /** @copydoc physx::PxQueryFilterCallback::preFilter */
  76. physx::PxQueryHitType::Enum preFilter(const physx::PxFilterData& filterData, const physx::PxShape* shape,
  77. const physx::PxRigidActor* actor, physx::PxHitFlags& queryFlags) override;
  78. /** @copydoc physx::PxQueryFilterCallback::postFilter */
  79. physx::PxQueryHitType::Enum postFilter(const physx::PxFilterData& filterData,
  80. const physx::PxQueryHit& hit) override;
  81. /** @copydoc physx::PxControllerFilterCallback::filter */
  82. bool filter(const physx::PxController& a, const physx::PxController& b) override;
  83. physx::PxCapsuleController* mController = nullptr;
  84. float mMinMoveDistance = 0.0f;
  85. float mLastMoveCall = 0.0f;
  86. };
  87. /** @} */
  88. }