diff options
| author | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
|---|---|---|
| committer | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
| commit | 54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch) | |
| tree | d915ac7828703ce4b963efdd9728a1777ba18c1e /apps/openmb/scene/Camera.hpp | |
Diffstat (limited to 'apps/openmb/scene/Camera.hpp')
| -rw-r--r-- | apps/openmb/scene/Camera.hpp | 69 |
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 |