From 86084516cdf47b46f2b5a3a048e66ea25ebce485 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Sun, 15 Feb 2026 12:42:14 -0600 Subject: [PATCH] feat(ui): add CSimpleCamera --- lib/typhoon | 2 +- src/ui/simple/CSimpleCamera.cpp | 52 +++++++++++++++++++++++++++++++++ src/ui/simple/CSimpleCamera.hpp | 35 ++++++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/ui/simple/CSimpleCamera.cpp create mode 100644 src/ui/simple/CSimpleCamera.hpp diff --git a/lib/typhoon b/lib/typhoon index 1c9e783..a7733b6 160000 --- a/lib/typhoon +++ b/lib/typhoon @@ -1 +1 @@ -Subproject commit 1c9e7831c874068e7c939a7dea8790eef6513d78 +Subproject commit a7733b6a8c2d52f081fbd74ca40d7ca8f94e1209 diff --git a/src/ui/simple/CSimpleCamera.cpp b/src/ui/simple/CSimpleCamera.cpp new file mode 100644 index 0000000..db439c1 --- /dev/null +++ b/src/ui/simple/CSimpleCamera.cpp @@ -0,0 +1,52 @@ +#include "ui/simple/CSimpleCamera.hpp" + +CSimpleCamera::CSimpleCamera(float nearZ, float farZ, float fov) { + this->float10 = 0.0f; + + this->m_nearZ = nearZ; + this->m_farZ = farZ; + this->m_fov = fov; + this->m_aspect = 1.0f; + + this->SetFacing(0.0f, 0.0f, 0.0f); +} + +float CSimpleCamera::FOV() { + return this->m_fov; +} + +C3Vector CSimpleCamera::Forward() const { + return { this->m_facing.a0, this->m_facing.a1, this->m_facing.a2 }; +} + +C3Vector CSimpleCamera::Right() const { + return { this->m_facing.b0, this->m_facing.b1, this->m_facing.b2 }; +} + +void CSimpleCamera::SetFacing(const C3Vector& forward) { + // TODO +} + +void CSimpleCamera::SetFacing(const C3Vector& forward, const C3Vector& up) { + // TODO +} + +void CSimpleCamera::SetFacing(float yaw, float pitch, float roll) { + this->m_facing.FromEulerAnglesZYX(yaw, pitch, roll); +} + +void CSimpleCamera::SetFarZ(float farZ) { + this->m_farZ = farZ; +} + +void CSimpleCamera::SetFieldOfView(float fov) { + this->m_fov = fov; +} + +void CSimpleCamera::SetNearZ(float nearZ) { + this->m_nearZ = nearZ; +} + +C3Vector CSimpleCamera::Up() const { + return { this->m_facing.c0, this->m_facing.c1, this->m_facing.c2 }; +} diff --git a/src/ui/simple/CSimpleCamera.hpp b/src/ui/simple/CSimpleCamera.hpp new file mode 100644 index 0000000..5f8c943 --- /dev/null +++ b/src/ui/simple/CSimpleCamera.hpp @@ -0,0 +1,35 @@ +#ifndef UI_SIMPLE_C_SIMPLE_CAMERA_HPP +#define UI_SIMPLE_C_SIMPLE_CAMERA_HPP + +#include +#include + +class CSimpleCamera { + public: + // Virtual public member functions + virtual float FOV(); + virtual C3Vector Forward() const; + virtual C3Vector Right() const; + virtual C3Vector Up() const; + + // Public member functions + CSimpleCamera(float nearZ, float farZ, float fov); + void SetFacing(const C3Vector& forward); + void SetFacing(const C3Vector& forward, const C3Vector& up); + void SetFacing(float yaw, float pitch, float roll); + void SetFarZ(float farZ); + void SetFieldOfView(float fov); + void SetNearZ(float nearZ); + + protected: + // Protected member variables + C3Vector m_position; + float float10; + C33Matrix m_facing; + float m_nearZ; + float m_farZ; + float m_fov; + float m_aspect; +}; + +#endif