aboutsummaryrefslogtreecommitdiff
path: root/apps/openmb/scene/Camera.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'apps/openmb/scene/Camera.hpp')
-rw-r--r--apps/openmb/scene/Camera.hpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/apps/openmb/scene/Camera.hpp b/apps/openmb/scene/Camera.hpp
new file mode 100644
index 0000000..7c5edc7
--- /dev/null
+++ b/apps/openmb/scene/Camera.hpp
@@ -0,0 +1,69 @@
+#pragma once
+
+#include <glm/glm.hpp>
+#include <utility>
+#include <vector>
+
+namespace scene {
+enum class Movement {
+ Forward,
+ Backward,
+ Left,
+ Right,
+ Up,
+ Down
+};
+
+class Camera {
+ public:
+ Camera();
+ Camera( const glm::vec3& position, const glm::vec3& up, float yaw, float pitch );
+
+ glm::mat4 getViewMatrix() const;
+ glm::mat4 getProjectionMatrix( float aspect ) const;
+
+ void processKeyboard( Movement dir, float deltaTime );
+ void processMouseMovement( float xoffset, float yoffset, bool constrainPitch = true );
+ void processMouseScroll( float yoffset );
+
+ void toggleFly();
+ void setSpeedMultiplier( float m );
+ void jump();
+
+ bool isFlying() const;
+ bool isGrounded() const;
+ float getSpeedMultiplier() const;
+
+ void updatePhysics( float deltaTime, const std::vector<std::pair<glm::vec3, glm::vec3>>& worldAABBs,
+ float floorY = 0.0f );
+
+ glm::vec3 position () const { return mPosition; }
+
+ float getPitch () const { return mPitch; }
+
+ float getYaw () const { return mYaw; }
+
+ private:
+ void updateCameraVectors();
+
+ private:
+ glm::vec3 mPosition;
+ glm::vec3 mFront;
+ glm::vec3 mUp;
+ glm::vec3 mRight;
+ glm::vec3 mWorldUp;
+
+ float mYaw;
+ float mPitch;
+
+ float mMovementSpeed;
+ float mMouseSensitivity;
+ float mFov;
+
+ glm::vec3 mVelocity;
+ bool mFlying;
+ bool mGrounded;
+ float mSpeedMultiplier;
+};
+
+} // namespace scene