NAP
firstpersoncontroller.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 #include <component.h>
8 #include <componentptr.h>
9 #include "perspcameracomponent.h"
10 #include <glm/gtx/quaternion.hpp>
11 
12 namespace nap
13 {
14  class FirstPersonControllerInstance;
15  class KeyPressEvent;
16  class KeyReleaseEvent;
17  class PointerMoveEvent;
18  class PointerPressEvent;
19  class PointerReleaseEvent;
20  class TransformComponentInstance;
21  class TransformComponent;
22  class KeyInputComponent;
23  class KeyInputComponent;
24 
31  class NAPAPI FirstPersonController : public Component
32  {
33  RTTI_ENABLE(Component)
35  public:
39  virtual void getDependentComponents(std::vector<rtti::TypeInfo>& components) const override;
40 
41  float mMovementSpeed = 3.0f;
42  float mRotateSpeed = 1.0f;
43 
45  };
46 
47 
55  {
56  RTTI_ENABLE(ComponentInstance)
57  public:
59 
63  virtual bool init(utility::ErrorState& errorState) override;
64 
68  virtual void update(double deltaTime) override;
69 
75  void enable(const glm::vec3& translate, const glm::quat& rotate);
76 
80  void enable();
81 
85  void disable() { mEnabled = false; }
86 
90  CameraComponentInstance& getCameraComponent();
91 
95  float getMovementSpeed() const { return mMovementSpeed; }
96 
101  void setMovementSpeed(float speed) { mMovementSpeed = speed; }
102 
106  float getRotationSpeed() const { return mRotateSpeed; }
107 
112  void setRotationSpeed(float speed) { mRotateSpeed = speed; }
113 
114  private:
118  void onKeyPress(const KeyPressEvent& keyPressEvent);
119 
123  void onKeyRelease(const KeyReleaseEvent& keyReleaseEvent);
124 
128  void onMouseDown(const PointerPressEvent& pointerPressEvent);
129 
133  void onMouseUp(const PointerReleaseEvent& pointerReleaseEvent);
134 
138  void onMouseMove(const PointerMoveEvent& pointerMoveEvent);
139 
140  private:
142 
143  TransformComponentInstance* mTransformComponent = nullptr; // The transform component used to move the entity
144  bool mMoveForward = false; // Whether we're moving forward
145  bool mMoveBackward = false; // Whether we're moving backwards
146  bool mMoveLeft = false; // Whether we're moving left
147  bool mMoveRight = false; // Whether we're moving right
148  bool mMoveUp = false; // Whether we're moving up
149  bool mMoveDown = false; // Whether we're moving down
150  bool mEnabled = true; // Set if enable() is called
151  bool mMoving = false; // Set if left mouse button is held
152  float mMovementSpeed = 1.0f; // Movement Speed
153  float mRotateSpeed = 1.0f; // Rotate Speed
154  };
155 
156 }
nap::FirstPersonController
Definition: firstpersoncontroller.h:31
nap::CameraComponentInstance
Definition: cameracomponent.h:38
nap::KeyPressEvent
Definition: inputevent.h:70
nap::FirstPersonController::mPerspCameraComponent
ComponentPtr< nap::PerspCameraComponent > mPerspCameraComponent
Property: "PerspCameraComponent" Camera that we're controlling.
Definition: firstpersoncontroller.h:44
nap::utility::ErrorState
Definition: errorstate.h:19
nap::KeyReleaseEvent
Definition: inputevent.h:83
nap::PointerReleaseEvent
Definition: inputevent.h:189
nap::FirstPersonControllerInstance
Definition: firstpersoncontroller.h:54
nap::FirstPersonControllerInstance::disable
void disable()
Definition: firstpersoncontroller.h:85
nap::EntityInstance
Definition: entity.h:34
nap::ComponentInstancePtr
Definition: component.h:28
nap::ComponentInstance
Definition: component.h:43
nap::Component
Definition: component.h:151
nap::PointerMoveEvent
Definition: inputevent.h:202
nap
Definition: templateapp.h:17
nap::FirstPersonControllerInstance::getRotationSpeed
float getRotationSpeed() const
Definition: firstpersoncontroller.h:106
nap::FirstPersonControllerInstance::getMovementSpeed
float getMovementSpeed() const
Definition: firstpersoncontroller.h:95
nap::FirstPersonControllerInstance::setMovementSpeed
void setMovementSpeed(float speed)
Definition: firstpersoncontroller.h:101
nap::FirstPersonControllerInstance::setRotationSpeed
void setRotationSpeed(float speed)
Definition: firstpersoncontroller.h:112
nap::ComponentPtr< nap::PerspCameraComponent >
nap::PointerPressEvent
Definition: inputevent.h:176