BsPhysXCharacterController.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. /** PhysX specific implementation if a CharacterController. */
  11. class PhysXCharacterController : public CharacterController
  12. , physx::PxUserControllerHitReport
  13. , physx::PxQueryFilterCallback
  14. , physx::PxControllerFilterCallback
  15. {
  16. public:
  17. PhysXCharacterController(physx::PxControllerManager* manager, const CHAR_CONTROLLER_DESC& desc);
  18. ~PhysXCharacterController();
  19. /** @copydoc CharacterController::move */
  20. CharacterCollisionFlags move(const Vector3& displacement) override;
  21. /** @copydoc CharacterController::getPosition */
  22. Vector3 getPosition() const override;
  23. /** @copydoc CharacterController::setPosition */
  24. void setPosition(const Vector3& position) override;
  25. /** @copydoc CharacterController::getFootPosition */
  26. Vector3 getFootPosition() const override;
  27. /** @copydoc CharacterController::setFootPosition */
  28. void setFootPosition(const Vector3& position) override;
  29. /** @copydoc CharacterController::getRadius */
  30. float getRadius() const override;
  31. /** @copydoc CharacterController::setRadius */
  32. void setRadius(float radius) override;
  33. /** @copydoc CharacterController::getHeight */
  34. float getHeight() const override;
  35. /** @copydoc CharacterController::setHeight */
  36. void setHeight(float height) override;
  37. /** @copydoc CharacterController::getUp */
  38. Vector3 getUp() const override;
  39. /** @copydoc CharacterController::setUp */
  40. void setUp(const Vector3& up) override;
  41. /** @copydoc CharacterController::getClimbingMode */
  42. CharacterClimbingMode getClimbingMode() const override;
  43. /** @copydoc CharacterController::setClimbingMode */
  44. void setClimbingMode(CharacterClimbingMode mode) override;
  45. /** @copydoc CharacterController::getNonWalkableMode */
  46. CharacterNonWalkableMode getNonWalkableMode() const override;
  47. /** @copydoc CharacterController::setNonWalkableMode */
  48. void setNonWalkableMode(CharacterNonWalkableMode mode) override;
  49. /** @copydoc CharacterController::getMinMoveDistance */
  50. float getMinMoveDistance() const override;
  51. /** @copydoc CharacterController::setMinMoveDistance */
  52. void setMinMoveDistance(float value) override;
  53. /** @copydoc CharacterController::getContactOffset */
  54. float getContactOffset() const override;
  55. /** @copydoc CharacterController::setContactOffset */
  56. void setContactOffset(float value) override;
  57. /** @copydoc CharacterController::getStepOffset */
  58. float getStepOffset() const override;
  59. /** @copydoc CharacterController::setStepOffset */
  60. void setStepOffset(float value) override;
  61. /** @copydoc CharacterController::getSlopeLimit */
  62. Radian getSlopeLimit() const override;
  63. /** @copydoc CharacterController::setSlopeLimit */
  64. void setSlopeLimit(Radian value) override;
  65. private:
  66. /** @copydoc physx::PxUserControllerHitReport::onShapeHit */
  67. void onShapeHit(const physx::PxControllerShapeHit& hit) override;
  68. /** @copydoc physx::PxUserControllerHitReport::onControllerHit */
  69. void onControllerHit(const physx::PxControllersHit& hit) override;
  70. /** @copydoc physx::PxUserControllerHitReport::onObstacleHit */
  71. void onObstacleHit(const physx::PxControllerObstacleHit& hit) override { /* Do nothing */ };
  72. /** @copydoc physx::PxQueryFilterCallback::preFilter */
  73. physx::PxQueryHitType::Enum preFilter(const physx::PxFilterData& filterData, const physx::PxShape* shape,
  74. const physx::PxRigidActor* actor, physx::PxHitFlags& queryFlags) override;
  75. /** @copydoc physx::PxQueryFilterCallback::postFilter */
  76. physx::PxQueryHitType::Enum postFilter(const physx::PxFilterData& filterData,
  77. const physx::PxQueryHit& hit) override;
  78. /** @copydoc physx::PxControllerFilterCallback::filter */
  79. bool filter(const physx::PxController& a, const physx::PxController& b) override;
  80. physx::PxCapsuleController* mController = nullptr;
  81. float mMinMoveDistance = 0.0f;
  82. float mLastMoveCall = 0.0f;
  83. };
  84. }