summary refs log tree commit diff
path: root/src/GFX/Camera.cpp
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-10-21 01:03:18 +0200
committerMel <einebeere@gmail.com>2022-10-21 01:03:18 +0200
commit6ed978051668c08f5a957c97570f364dd580c807 (patch)
treee3db93c52fcd86e26bc859d46e755290d2a7f40c /src/GFX/Camera.cpp
parent0464a83dfaebaa75d6e2d3b7431e84ebd83fccfd (diff)
downloadmeowcraft-6ed978051668c08f5a957c97570f364dd580c807.tar.zst
meowcraft-6ed978051668c08f5a957c97570f364dd580c807.zip
Namespace and Folder refactor
Diffstat (limited to 'src/GFX/Camera.cpp')
-rw-r--r--src/GFX/Camera.cpp42
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;
+    }
+}
+
+}