#pragma once #include #include #include 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>& 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