From e5cc9de4866e6d96a8395a8a0d3d5c9e7a6cd223 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Wed, 18 Feb 2026 19:34:52 -0600 Subject: [PATCH] feat(ui): add CGWorldFrame::OnFrameSizeChanged --- src/ui/game/CGWorldFrame.cpp | 29 +++++++++++++++++++++++++++++ src/ui/game/CGWorldFrame.hpp | 13 +++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/ui/game/CGWorldFrame.cpp b/src/ui/game/CGWorldFrame.cpp index 3446f1b..fab12fd 100644 --- a/src/ui/game/CGWorldFrame.cpp +++ b/src/ui/game/CGWorldFrame.cpp @@ -1,6 +1,8 @@ #include "ui/game/CGWorldFrame.hpp" +#include "gx/Coordinate.hpp" #include "gx/Shader.hpp" #include "gx/Transform.hpp" +#include "ui/game/CGCamera.hpp" #include "ui/game/PlayerName.hpp" #include #include @@ -46,6 +48,10 @@ CGWorldFrame::CGWorldFrame(CSimpleFrame* parent) : CSimpleFrame(parent) { this->EnableEvent(SIMPLE_EVENT_MOUSEWHEEL, -1); // TODO + + this->m_camera = STORM_NEW(CGCamera); + + // TODO } void CGWorldFrame::OnFrameRender(CRenderBatch* batch, uint32_t layer) { @@ -56,6 +62,29 @@ void CGWorldFrame::OnFrameRender(CRenderBatch* batch, uint32_t layer) { } } +void CGWorldFrame::OnFrameSizeChanged(const CRect& rect) { + this->CSimpleFrame::OnFrameSizeChanged(rect); + + // Screen rect (DDC) + this->m_screenRect.minX = std::max(this->m_rect.minX, 0.0f); + this->m_screenRect.minY = std::max(this->m_rect.minY, 0.0f); + this->m_screenRect.maxX = std::min(this->m_rect.maxX, NDCToDDCWidth(1.0f)); + this->m_screenRect.maxY = std::min(this->m_rect.maxY, NDCToDDCHeight(1.0f)); + + // Camera aspect ratio + if (this->m_camera) { + this->m_camera->SetScreenAspect(this->m_screenRect); + } + + // Viewport (NDC) + DDCToNDC(this->m_rect.minX, this->m_rect.minY, &this->m_viewport.minX, &this->m_viewport.minY); + DDCToNDC(this->m_rect.maxX, this->m_rect.maxY, &this->m_viewport.maxX, &this->m_viewport.maxY); + this->m_viewport.minX = std::max(this->m_viewport.minX, 0.0f); + this->m_viewport.minY = std::max(this->m_viewport.minY, 0.0f); + this->m_viewport.maxX = std::min(this->m_viewport.maxX, 1.0f); + this->m_viewport.maxY = std::min(this->m_viewport.maxY, 1.0f); +} + void CGWorldFrame::OnWorldRender() { // TODO } diff --git a/src/ui/game/CGWorldFrame.hpp b/src/ui/game/CGWorldFrame.hpp index 6cec83a..169940c 100644 --- a/src/ui/game/CGWorldFrame.hpp +++ b/src/ui/game/CGWorldFrame.hpp @@ -4,6 +4,8 @@ #include "ui/simple/CSimpleFrame.hpp" #include +class CGCamera; + class CGWorldFrame : public CSimpleFrame { public: // Static variables @@ -15,11 +17,22 @@ class CGWorldFrame : public CSimpleFrame { // Virtual member functions virtual void OnFrameRender(CRenderBatch* batch, uint32_t layer); + // TODO + virtual void OnFrameSizeChanged(const CRect& rect); // Member functions CGWorldFrame(CSimpleFrame* parent); void OnWorldRender(); void OnWorldUpdate(); + + private: + // Private member variables + // TODO + CRect m_screenRect; + CRect m_viewport; + // TODO + CGCamera* m_camera; + // TODO }; #endif