Compare commits

...

2 Commits

Author SHA1 Message Date
VDm
a30b405251 feat(gameui): add CSimpleCamera class 2025-06-23 00:20:16 +04:00
VDm
a99dc295c4 fix(ui): fix infinite loop in CSimpleFrame::SetBeingScrolled 2025-06-22 23:11:59 +04:00
5 changed files with 133 additions and 3 deletions

View File

@ -1,6 +1,8 @@
#include "gameui/CGWorldFrame.hpp" #include "gameui/CGWorldFrame.hpp"
#include "gx/Transform.hpp" #include "gx/Transform.hpp"
#include "gx/Draw.hpp"
#include "gx/Shader.hpp"
#include <bc/Memory.hpp> #include <bc/Memory.hpp>
#include <tempest/Matrix.hpp> #include <tempest/Matrix.hpp>
@ -36,15 +38,27 @@ void CGWorldFrame::RenderWorld(void* param) {
GxXformView(saved_view); GxXformView(saved_view);
CGWorldFrame::OnWorldUpdate(); CGWorldFrame::OnWorldUpdate();
// TODO: PlayerNameUpdateWorldText();
CGWorldFrame::OnWorldRender(); CGWorldFrame::OnWorldRender();
//PlayerNameRenderWorldText(); // TODO: PlayerNameRenderWorldText();
GxXformSetProjection(saved_proj); GxXformSetProjection(saved_proj);
GxXformSetView(saved_view); GxXformSetView(saved_view);
CShaderEffect::UpdateProjMatrix();
} }
void CGWorldFrame::OnWorldUpdate() { void CGWorldFrame::OnWorldUpdate() {
GxXformSetViewport(0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
CImVector clearColor = { 0x00, 0x00, 0x00, 0xFF };
GxSceneClear(3, clearColor);
C44Matrix matrix;
GxuXformCreateOrtho(0.0, 1.0, -0.5, 0.5, 0.0, 500.0, matrix);
GxXformSetView(C44Matrix());
GxXformSetProjection(matrix);
} }
void CGWorldFrame::OnWorldRender() { void CGWorldFrame::OnWorldRender() {

View File

@ -1,4 +1,7 @@
file(GLOB PRIVATE_SOURCES "*.cpp") file(GLOB PRIVATE_SOURCES
"*.cpp"
"camera/*.cpp"
)
add_library(gameui STATIC add_library(gameui STATIC
${PRIVATE_SOURCES} ${PRIVATE_SOURCES}

View File

@ -0,0 +1,65 @@
#include "CSimpleCamera.hpp"
#include <tempest/rect/CRect.hpp>
CSimpleCamera::CSimpleCamera()
: m_position()
, m_facing()
, m_nearZ(0.11111111f)
, m_farZ(277.77777f)
, m_fov(1.5707964f)
, m_aspect(1.0f) {
this->SetFacing(0.0f, 0.0f, 0.0f);
}
CSimpleCamera::CSimpleCamera(float nearZ, float farZ, float fov)
: m_position()
, m_facing()
, m_nearZ(nearZ)
, m_farZ(farZ)
, m_fov(fov)
, m_aspect(1.0f) {
this->SetFacing(0.0f, 0.0f, 0.0f);
}
CSimpleCamera::~CSimpleCamera() {
}
C3Vector CSimpleCamera::Forward() {
return {
this->m_facing.a0,
this->m_facing.a1,
this->m_facing.a2
};
}
C3Vector CSimpleCamera::Right() {
return {
this->m_facing.b0,
this->m_facing.b1,
this->m_facing.b2
};
}
C3Vector CSimpleCamera::Up() {
return {
this->m_facing.c0,
this->m_facing.c1,
this->m_facing.c2
};
}
void CSimpleCamera::SetFacing(float yaw, float pitch, float roll) {
// TODO
}
void CSimpleCamera::SetFacing(const C3Vector& forward, const C3Vector& up) {
// TODO
}
void CSimpleCamera::SetFacing(const C3Vector& forward) {
// TODO
}
void CSimpleCamera::SetGxProjectionAndView(const CRect& projectionRect) {
// TODO
}

View File

@ -0,0 +1,48 @@
#ifndef GAME_UI_CAMERA_CSIMPLECAMERA_HPP
#define GAME_UI_CAMERA_CSIMPLECAMERA_HPP
#include <tempest/vector/C3Vector.hpp>
#include <tempest/matrix/C33Matrix.hpp>
class CRect;
class CSimpleCamera {
public:
CSimpleCamera();
CSimpleCamera(float nearZ, float farZ, float fov);
virtual ~CSimpleCamera();
C3Vector& Position() { this->m_position; };
C33Matrix& Facing() { this->m_facing; };
float NearZ() { this->m_nearZ; };
float FarZ() { this->m_farZ; };
float FOV() { this->m_fov; };
float Aspect() { this->m_aspect; };
C3Vector Forward();
C3Vector Right();
C3Vector Up();
void SetPosition(const C3Vector& position) { this->m_position = position; };
void SetPosition(float x, float y, float z) { this->m_position = C3Vector(x, y, z); };
void SetFacing(float yaw, float pitch, float roll);
void SetFacing(const C3Vector& forward, const C3Vector& up);
void SetFacing(const C3Vector& forward);
void SetFieldOfView(float value) { this->m_fov = value; };
void SetNearZ(float value) { this->m_nearZ = value; };
void SetFarZ(float value) { this->m_farZ = value; };
void SetGxProjectionAndView(const CRect& projectionRect);
// Member variables
C3Vector m_position;
C33Matrix m_facing;
float m_nearZ;
float m_farZ;
float m_fov;
float m_aspect;
};
#endif // GAME_UI_CAMERA_CSIMPLECAMERA_HPP

View File

@ -1315,7 +1315,7 @@ void CSimpleFrame::SetBeingScrolled(int32_t a2, int32_t a3) {
this->m_batchDirty |= 0x1F; this->m_batchDirty |= 0x1F;
} }
for (auto child = this->m_children.Head(); child; this->m_children.Link(child)->Next()) { for (auto child = this->m_children.Head(); child; child = this->m_children.Link(child)->Next()) {
if (!(child->frame->m_flags & 0x4000)) { if (!(child->frame->m_flags & 0x4000)) {
child->frame->SetBeingScrolled(a2, -1); child->frame->SetBeingScrolled(a2, -1);
} }