PlayerControllerComponent.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // Copyright (C) 2009-2016, Panagiotis Christopoulos Charitos.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <anki/scene/SceneComponent.h>
  7. #include <anki/physics/PhysicsPlayerController.h>
  8. namespace anki
  9. {
  10. /// @addtogroup scene
  11. /// @{
  12. /// Physics player controller component.
  13. class PlayerControllerComponent : public SceneComponent
  14. {
  15. public:
  16. PlayerControllerComponent(
  17. SceneNode* node, PhysicsPlayerControllerPtr player)
  18. : SceneComponent(Type::PLAYER_CONTROLLER, node)
  19. , m_player(player)
  20. {
  21. }
  22. ~PlayerControllerComponent() = default;
  23. const Transform& getTransform() const
  24. {
  25. return m_trf;
  26. }
  27. void setTransform(const Transform& trf)
  28. {
  29. m_player->moveToPosition(trf.getOrigin());
  30. }
  31. void setVelocity(F32 forwardSpeed,
  32. F32 strafeSpeed,
  33. F32 jumpSpeed,
  34. const Vec4& forwardDir)
  35. {
  36. m_player->setVelocity(forwardSpeed, strafeSpeed, jumpSpeed, forwardDir);
  37. }
  38. ANKI_USE_RESULT Error update(SceneNode&, F32, F32, Bool& updated) override
  39. {
  40. m_trf = m_player->getTransform(updated);
  41. return ErrorCode::NONE;
  42. }
  43. static Bool classof(const SceneComponent& c)
  44. {
  45. return c.getType() == Type::PLAYER_CONTROLLER;
  46. }
  47. private:
  48. PhysicsPlayerControllerPtr m_player;
  49. Transform m_trf;
  50. };
  51. /// @}
  52. } // end namespace anki