PlayerControllerComponent.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Scene/Components/SceneComponent.h>
  7. #include <AnKi/Physics/PhysicsPlayerController.h>
  8. namespace anki {
  9. /// @addtogroup scene
  10. /// @{
  11. /// Physics player controller component.
  12. class PlayerControllerComponent : public SceneComponent
  13. {
  14. ANKI_SCENE_COMPONENT(PlayerControllerComponent)
  15. public:
  16. PlayerControllerComponent(SceneNode* node);
  17. const Transform& getWorldTransform() const
  18. {
  19. return m_trf;
  20. }
  21. void setWorldTransform(const Transform& trf)
  22. {
  23. m_player->moveToPosition(trf.getOrigin().xyz());
  24. }
  25. void setVelocity(F32 forwardSpeed, F32 strafeSpeed, F32 jumpSpeed, const Vec4& forwardDir)
  26. {
  27. m_player->setVelocity(forwardSpeed, strafeSpeed, jumpSpeed, forwardDir);
  28. }
  29. void moveToPosition(const Vec3& pos)
  30. {
  31. m_player->moveToPosition(pos);
  32. }
  33. ANKI_USE_RESULT Error update(SceneNode& node, Second prevTime, Second crntTime, Bool& updated) override
  34. {
  35. const Transform newTrf = m_player->getTransform();
  36. updated = newTrf != m_trf;
  37. m_trf = newTrf;
  38. return Error::NONE;
  39. }
  40. PhysicsPlayerControllerPtr getPhysicsPlayerController() const
  41. {
  42. return m_player;
  43. }
  44. private:
  45. PhysicsPlayerControllerPtr m_player;
  46. Transform m_trf = Transform::getIdentity();
  47. };
  48. /// @}
  49. } // end namespace anki