2
0

BsCCharacterController.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. /** @name Internal
  72. * @{
  73. */
  74. /** Returns the character controller that this component wraps. */
  75. CharacterController* _getInternal() const { return static_cast<CharacterController*>(mInternal.get()); }
  76. /** @} */
  77. /************************************************************************/
  78. /* COMPONENT OVERRIDES */
  79. /************************************************************************/
  80. protected:
  81. friend class SceneObject;
  82. using Component::destroyInternal;
  83. /** @copydoc Component::onInitialized() */
  84. void onInitialized() override;
  85. /** @copydoc Component::onDestroyed() */
  86. void onDestroyed() override;
  87. /** @copydoc Component::onDisabled() */
  88. void onDisabled() override;
  89. /** @copydoc Component::onEnabled() */
  90. void onEnabled() override;
  91. /** @copydoc Component::onTransformChanged() */
  92. void onTransformChanged(TransformChangedFlags flags) override;
  93. /** Updates the position by copying it from the controller to the component's scene object. */
  94. void updatePositionFromController();
  95. /** Updates the dimensions of the controller by taking account scale of the parent scene object. */
  96. void updateDimensions();
  97. /** Destroys the internal character controller representation. */
  98. void destroyInternal();
  99. /** Triggered when the internal controller hits a collider. */
  100. void triggerOnColliderHit(const ControllerColliderCollision& value);
  101. /** Triggered when the internal controller hits another controller. */
  102. void triggerOnControllerHit(const ControllerControllerCollision& value);
  103. SPtr<CharacterController> mInternal;
  104. CHAR_CONTROLLER_DESC mDesc;
  105. UINT64 mLayer = 1;
  106. /************************************************************************/
  107. /* RTTI */
  108. /************************************************************************/
  109. public:
  110. friend class CCharacterControllerRTTI;
  111. static RTTITypeBase* getRTTIStatic();
  112. RTTITypeBase* getRTTI() const override;
  113. protected:
  114. CCharacterController() {} // Serialization only
  115. };
  116. /** @} */
  117. }