diff options
| author | Mel <einebeere@gmail.com> | 2022-10-21 01:03:18 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-10-21 01:03:18 +0200 |
| commit | 6ed978051668c08f5a957c97570f364dd580c807 (patch) | |
| tree | e3db93c52fcd86e26bc859d46e755290d2a7f40c /src/GFX/Camera.cpp | |
| parent | 0464a83dfaebaa75d6e2d3b7431e84ebd83fccfd (diff) | |
| download | meowcraft-6ed978051668c08f5a957c97570f364dd580c807.tar.zst meowcraft-6ed978051668c08f5a957c97570f364dd580c807.zip | |
Namespace and Folder refactor
Diffstat (limited to 'src/GFX/Camera.cpp')
| -rw-r--r-- | src/GFX/Camera.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/GFX/Camera.cpp b/src/GFX/Camera.cpp new file mode 100644 index 0000000..6b25347 --- /dev/null +++ b/src/GFX/Camera.cpp @@ -0,0 +1,42 @@ +#include "Camera.hpp" + +namespace MC::GFX { + +Vector<3> Camera::position() { + return m_position; +} + +void Camera::set_position(Vector<3> position) { + m_position = position; +} + +void Camera::move(Vector<3> vector) { + m_position = m_position + vector; +} + +void Camera::move_relative(Vector<3> by) { + auto rotation = Matrix<4, 4>::rotation(m_angles); + + auto result = rotation.transpose() * Vector<4>{by.x(), by.y(), by.z(), 1.0f}; + move(result.elements); +} + +Rotation Camera::angles() { + return m_angles; +} + +void Camera::set_angles(Rotation angles) { + m_angles = angles; +} + +void Camera::rotate(Rotation by) { + m_angles = m_angles + by; + + if (m_angles.pitch() > 89.0f) { + m_angles.pitch() = 89.0f; + } else if (m_angles.pitch() < -89.0f) { + m_angles.pitch() = -89.0f; + } +} + +} |
