BsCCharacterController.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #include "BsCharacterController.h"
  6. #include "BsComponent.h"
  7. namespace BansheeEngine
  8. {
  9. /** @addtogroup Components-Core
  10. * @{
  11. */
  12. /**
  13. * @copydoc CharacterController
  14. *
  15. * Wraps CharacterController as a Component.
  16. */
  17. class BS_CORE_EXPORT CCharacterController : public Component
  18. {
  19. public:
  20. CCharacterController(const HSceneObject& parent);
  21. /** @copydoc CharacterController::move */
  22. inline CharacterCollisionFlags move(const Vector3& displacement);
  23. /** @copydoc CharacterController::getFootPosition */
  24. inline Vector3 getFootPosition() const;
  25. /** @copydoc CharacterController::setFootPosition */
  26. inline void setFootPosition(const Vector3& position);
  27. /** @copydoc CharacterController::getRadius */
  28. float getRadius() const { return mDesc.radius; }
  29. /** @copydoc CharacterController::setRadius */
  30. inline void setRadius(float radius);
  31. /** @copydoc CharacterController::getHeight */
  32. float getHeight() const { return mDesc.height; }
  33. /** @copydoc CharacterController::setHeight */
  34. inline void setHeight(float height);
  35. /** @copydoc CharacterController::getUp */
  36. Vector3 getUp() const { return mDesc.up; }
  37. /** @copydoc CharacterController::setUp */
  38. inline void setUp(const Vector3& up);
  39. /** @copydoc CharacterController::getClimbingMode */
  40. CharacterClimbingMode getClimbingMode() const { return mDesc.climbingMode; }
  41. /** @copydoc CharacterController::setClimbingMode */
  42. inline void setClimbingMode(CharacterClimbingMode mode);
  43. /** @copydoc CharacterController::getNonWalkableMode */
  44. CharacterNonWalkableMode getNonWalkableMode() const { return mDesc.nonWalkableMode; }
  45. /** @copydoc CharacterController::setNonWalkableMode */
  46. inline void setNonWalkableMode(CharacterNonWalkableMode mode);
  47. /** @copydoc CharacterController::getMinMoveDistance */
  48. float getMinMoveDistance() const { return mDesc.minMoveDistance; }
  49. /** @copydoc CharacterController::setMinMoveDistance */
  50. inline void setMinMoveDistance(float value);
  51. /** @copydoc CharacterController::getContactOffset */
  52. float getContactOffset() const { return mDesc.contactOffset; }
  53. /** @copydoc CharacterController::setContactOffset */
  54. inline void setContactOffset(float value);
  55. /** @copydoc CharacterController::getStepOffset */
  56. inline float getStepOffset() const { return mDesc.stepOffset; }
  57. /** @copydoc CharacterController::setStepOffset */
  58. inline void setStepOffset(float value);
  59. /** @copydoc CharacterController::getSlopeLimit */
  60. Radian getSlopeLimit() const { return mDesc.slopeLimit; }
  61. /** @copydoc CharacterController::setSlopeLimit */
  62. inline void setSlopeLimit(Radian value);
  63. /** @copydoc CharacterController::getLayer */
  64. UINT64 getLayer() const { return mLayer; }
  65. /** @copydoc CharacterController::setLayer */
  66. inline void setLayer(UINT64 layer);
  67. /** @copydoc CharacterController::onColliderHit */
  68. Event<void(const ControllerColliderCollision&)> onColliderHit;
  69. /** @copydoc CharacterController::onControllerHit */
  70. Event<void(const ControllerControllerCollision&)> onControllerHit;
  71. /** @cond INTERNAL */
  72. /** Returns the character controller that this component wraps. */
  73. CharacterController* _getInternal() const { return static_cast<CharacterController*>(mInternal.get()); }
  74. /** @endcond */
  75. /************************************************************************/
  76. /* COMPONENT OVERRIDES */
  77. /************************************************************************/
  78. protected:
  79. friend class SceneObject;
  80. /** @copydoc Component::onInitialized() */
  81. void onInitialized() override;
  82. /** @copydoc Component::onDestroyed() */
  83. void onDestroyed() override;
  84. /** @copydoc Component::onDisabled() */
  85. void onDisabled() override;
  86. /** @copydoc Component::onEnabled() */
  87. void onEnabled() override;
  88. /** @copydoc Component::onTransformChanged() */
  89. void onTransformChanged(TransformChangedFlags flags) override;
  90. protected:
  91. /** Updates the position by copying it from the controller to the component's scene object. */
  92. void updatePositionFromController();
  93. /** Updates the dimensions of the controller by taking account scale of the parent scene object. */
  94. void updateDimensions();
  95. /** Destroys the internal character controller representation. */
  96. void destroyInternal();
  97. /** Triggered when the internal controller hits a collider. */
  98. void triggerOnColliderHit(const ControllerColliderCollision& value);
  99. /** Triggered when the internal controller hits another controller. */
  100. void triggerOnControllerHit(const ControllerControllerCollision& value);
  101. SPtr<CharacterController> mInternal;
  102. CHAR_CONTROLLER_DESC mDesc;
  103. UINT64 mLayer = 1;
  104. /************************************************************************/
  105. /* RTTI */
  106. /************************************************************************/
  107. public:
  108. friend class CCharacterControllerRTTI;
  109. static RTTITypeBase* getRTTIStatic();
  110. RTTITypeBase* getRTTI() const override;
  111. protected:
  112. CCharacterController() {} // Serialization only
  113. };
  114. /** @} */
  115. }