BsCCharacterController.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  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 "Physics/BsCharacterController.h"
  6. #include "Scene/BsComponent.h"
  7. namespace bs
  8. {
  9. /** @addtogroup Components-Core
  10. * @{
  11. */
  12. /**
  13. * @copydoc CharacterController
  14. *
  15. * @note Wraps CharacterController as a Component.
  16. */
  17. class BS_CORE_EXPORT BS_SCRIPT_EXPORT(m:Physics,n:CharacterController) CCharacterController : public Component
  18. {
  19. public:
  20. CCharacterController(const HSceneObject& parent);
  21. /** @copydoc CharacterController::move */
  22. BS_SCRIPT_EXPORT(n:Move)
  23. CharacterCollisionFlags move(const Vector3& displacement);
  24. /** @copydoc CharacterController::getFootPosition */
  25. BS_SCRIPT_EXPORT(n:FootPosition,pr:getter)
  26. Vector3 getFootPosition() const;
  27. /** @copydoc CharacterController::setFootPosition */
  28. BS_SCRIPT_EXPORT(n:FootPosition,pr:setter)
  29. void setFootPosition(const Vector3& position);
  30. /** @copydoc CharacterController::getRadius */
  31. BS_SCRIPT_EXPORT(n:Radius,pr:getter)
  32. float getRadius() const { return mDesc.radius; }
  33. /** @copydoc CharacterController::setRadius */
  34. BS_SCRIPT_EXPORT(n:Radius,pr:setter)
  35. void setRadius(float radius);
  36. /** @copydoc CharacterController::getHeight */
  37. BS_SCRIPT_EXPORT(n:Height,pr:getter)
  38. float getHeight() const { return mDesc.height; }
  39. /** @copydoc CharacterController::setHeight */
  40. BS_SCRIPT_EXPORT(n:Height,pr:setter)
  41. void setHeight(float height);
  42. /** @copydoc CharacterController::getUp */
  43. BS_SCRIPT_EXPORT(n:Up,pr:getter)
  44. Vector3 getUp() const { return mDesc.up; }
  45. /** @copydoc CharacterController::setUp */
  46. BS_SCRIPT_EXPORT(n:Up,pr:setter)
  47. void setUp(const Vector3& up);
  48. /** @copydoc CharacterController::getClimbingMode */
  49. BS_SCRIPT_EXPORT(n:ClimbingMode,pr:getter)
  50. CharacterClimbingMode getClimbingMode() const { return mDesc.climbingMode; }
  51. /** @copydoc CharacterController::setClimbingMode */
  52. BS_SCRIPT_EXPORT(n:ClimbingMode,pr:setter)
  53. void setClimbingMode(CharacterClimbingMode mode);
  54. /** @copydoc CharacterController::getNonWalkableMode */
  55. BS_SCRIPT_EXPORT(n:NonWalkableMode,pr:getter)
  56. CharacterNonWalkableMode getNonWalkableMode() const { return mDesc.nonWalkableMode; }
  57. /** @copydoc CharacterController::setNonWalkableMode */
  58. BS_SCRIPT_EXPORT(n:NonWalkableMode,pr:setter)
  59. void setNonWalkableMode(CharacterNonWalkableMode mode);
  60. /** @copydoc CharacterController::getMinMoveDistance */
  61. BS_SCRIPT_EXPORT(n:MinMoveDistance,pr:getter)
  62. float getMinMoveDistance() const { return mDesc.minMoveDistance; }
  63. /** @copydoc CharacterController::setMinMoveDistance */
  64. BS_SCRIPT_EXPORT(n:MinMoveDistance,pr:setter)
  65. void setMinMoveDistance(float value);
  66. /** @copydoc CharacterController::getContactOffset */
  67. BS_SCRIPT_EXPORT(n:ContactOffset,pr:getter)
  68. float getContactOffset() const { return mDesc.contactOffset; }
  69. /** @copydoc CharacterController::setContactOffset */
  70. BS_SCRIPT_EXPORT(n:ContactOffset,pr:setter)
  71. void setContactOffset(float value);
  72. /** @copydoc CharacterController::getStepOffset */
  73. BS_SCRIPT_EXPORT(n:StepOffset,pr:getter)
  74. float getStepOffset() const { return mDesc.stepOffset; }
  75. /** @copydoc CharacterController::setStepOffset */
  76. BS_SCRIPT_EXPORT(n:StepOffset,pr:setter)
  77. void setStepOffset(float value);
  78. /** @copydoc CharacterController::getSlopeLimit */
  79. BS_SCRIPT_EXPORT(n:SlopeLimit,pr:getter)
  80. Radian getSlopeLimit() const { return mDesc.slopeLimit; }
  81. /** @copydoc CharacterController::setSlopeLimit */
  82. BS_SCRIPT_EXPORT(n:SlopeLimit,pr:setter)
  83. void setSlopeLimit(Radian value);
  84. /** @copydoc CharacterController::getLayer */
  85. BS_SCRIPT_EXPORT(n:Layer,pr:getter)
  86. UINT64 getLayer() const { return mLayer; }
  87. /** @copydoc CharacterController::setLayer */
  88. BS_SCRIPT_EXPORT(n:Layer,pr:setter)
  89. void setLayer(UINT64 layer);
  90. /** @copydoc CharacterController::onColliderHit */
  91. BS_SCRIPT_EXPORT(n:OnColliderHit)
  92. Event<void(const ControllerColliderCollision&)> onColliderHit;
  93. /** @copydoc CharacterController::onControllerHit */
  94. BS_SCRIPT_EXPORT(n:OnControllerHit)
  95. Event<void(const ControllerControllerCollision&)> onControllerHit;
  96. /** @name Internal
  97. * @{
  98. */
  99. /** Returns the character controller that this component wraps. */
  100. CharacterController* _getInternal() const { return static_cast<CharacterController*>(mInternal.get()); }
  101. /** @} */
  102. /************************************************************************/
  103. /* COMPONENT OVERRIDES */
  104. /************************************************************************/
  105. protected:
  106. friend class SceneObject;
  107. using Component::destroyInternal;
  108. /** @copydoc Component::onInitialized() */
  109. void onInitialized() override;
  110. /** @copydoc Component::onDestroyed() */
  111. void onDestroyed() override;
  112. /** @copydoc Component::onDisabled() */
  113. void onDisabled() override;
  114. /** @copydoc Component::onEnabled() */
  115. void onEnabled() override;
  116. /** @copydoc Component::onTransformChanged() */
  117. void onTransformChanged(TransformChangedFlags flags) override;
  118. /** Updates the position by copying it from the controller to the component's scene object. */
  119. void updatePositionFromController();
  120. /** Updates the dimensions of the controller by taking account scale of the parent scene object. */
  121. void updateDimensions();
  122. /** Destroys the internal character controller representation. */
  123. void destroyInternal();
  124. /** Triggered when the internal controller hits a collider. */
  125. void triggerOnColliderHit(const ControllerColliderCollision& value);
  126. /** Triggered when the internal controller hits another controller. */
  127. void triggerOnControllerHit(const ControllerControllerCollision& value);
  128. SPtr<CharacterController> mInternal;
  129. CHAR_CONTROLLER_DESC mDesc;
  130. UINT64 mLayer = 1;
  131. /************************************************************************/
  132. /* RTTI */
  133. /************************************************************************/
  134. public:
  135. friend class CCharacterControllerRTTI;
  136. static RTTITypeBase* getRTTIStatic();
  137. RTTITypeBase* getRTTI() const override;
  138. protected:
  139. CCharacterController() {} // Serialization only
  140. };
  141. /** @} */
  142. }