Newer
Older
ForwardPlusRenderer / Camera.ixx
module;
#include <stdafx.h>

export module Camera;
namespace fpr
{
export class Camera
{
  glm::vec3 m_position;
  glm::quat m_rotation;
  glm::mat4 m_view_matrix;
  glm::mat4 m_projection_matrix;
  float     m_FOV;
  float     m_near;
  float     m_far;
  float     m_movement_speed = 300.0f;
  float     m_rotation_speed = 2.0f;
public:
  Camera(
      glm::vec3 position = { 0.0f, 0, 0.0f },
      glm::quat rotation = { 1.0f, 0.0f, 0.0f, 0.0f },
      float     FOV      = 60.0f,
      float     near     = 1.0f,
      float     far      = 10000);

  void Update();

  void SetPosition(glm::vec3 new_pos);
  void SetRotation(float amount, glm::vec3 axis_rot);

  void MoveX(float value);
  void MoveY(float value);
  void MoveZ(float value);

  void RotateX(float value);
  void RotateY(float value);
  void RotateZ(float value);

  [[nodiscard]] const glm::mat4 GetViewMatrix() const FPR_NOEXCEPT;
  [[nodiscard]] const glm::mat4 GetProjectionMatrix() const FPR_NOEXCEPT;
  [[nodiscard]] const glm::vec3 GetPosition() const FPR_NOEXCEPT;
};
} // namespace fpr