Compare commits

...

6 Commits

Author SHA1 Message Date
Tristan 'Natrist' Cormier
e9261a8834
Merge 4a102c6ace into 7d491570e4 2026-02-16 11:01:39 -05:00
fallenoak
7d491570e4
feat(ui): add CSimpleCamera::GetScene
Some checks failed
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:cl compiler_name:MSVC cxx:cl os:windows-latest system_name:Windows test_path:WhoaTest]) (push) Has been cancelled
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:clang compiler_name:Clang cxx:clang++ os:macos-latest system_name:macOS test_path:WhoaTest]) (push) Has been cancelled
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:gcc compiler_name:GCC cxx:g++ os:ubuntu-latest system_name:Linux test_path:WhoaTest]) (push) Has been cancelled
2026-02-15 21:02:06 -06:00
fallenoak
2711c752ba
chore(build): update typhoon 2026-02-15 20:28:56 -06:00
fallenoak
0e6f65f32e
feat(ui): implement CSimpleCamera::SetFacing with forward vector 2026-02-15 20:12:01 -06:00
fallenoak
86084516cd
feat(ui): add CSimpleCamera
Some checks are pending
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:cl compiler_name:MSVC cxx:cl os:windows-latest system_name:Windows test_path:WhoaTest]) (push) Waiting to run
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:clang compiler_name:Clang cxx:clang++ os:macos-latest system_name:macOS test_path:WhoaTest]) (push) Waiting to run
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:gcc compiler_name:GCC cxx:g++ os:ubuntu-latest system_name:Linux test_path:WhoaTest]) (push) Waiting to run
2026-02-15 12:42:14 -06:00
Tristan Cormier
4a102c6ace feat(glue): implement Script_ContestAccepted 2026-01-11 17:01:24 -05:00
6 changed files with 161 additions and 2 deletions

@ -1 +1 @@
Subproject commit 1c9e7831c874068e7c939a7dea8790eef6513d78 Subproject commit dc8f10e407daa8bdf7e90d9438b55d5883780825

View File

@ -47,6 +47,7 @@ float CGlueMgr::m_aspect;
bool CGlueMgr::m_authenticated; bool CGlueMgr::m_authenticated;
const CharacterSelectionDisplay* CGlueMgr::m_characterInfo; const CharacterSelectionDisplay* CGlueMgr::m_characterInfo;
int32_t CGlueMgr::m_clientKickReason; int32_t CGlueMgr::m_clientKickReason;
int32_t CGlueMgr::m_contestAccepted = 1; // TODO
char CGlueMgr::m_currentScreen[64]; char CGlueMgr::m_currentScreen[64];
EffectDeath* CGlueMgr::m_deathEffect; EffectDeath* CGlueMgr::m_deathEffect;
int32_t CGlueMgr::m_disconnectPending; int32_t CGlueMgr::m_disconnectPending;

View File

@ -41,6 +41,7 @@ class CGlueMgr {
static bool m_authenticated; static bool m_authenticated;
static const CharacterSelectionDisplay* m_characterInfo; static const CharacterSelectionDisplay* m_characterInfo;
static int32_t m_clientKickReason; static int32_t m_clientKickReason;
static int32_t m_contestAccepted;
static char m_currentScreen[]; static char m_currentScreen[];
static EffectDeath* m_deathEffect; static EffectDeath* m_deathEffect;
static int32_t m_disconnectPending; static int32_t m_disconnectPending;

View File

@ -228,7 +228,14 @@ int32_t Script_ShowContestNotice(lua_State* L) {
} }
int32_t Script_ContestAccepted(lua_State* L) { int32_t Script_ContestAccepted(lua_State* L) {
WHOA_UNIMPLEMENTED(0); if (CGlueMgr::m_contestAccepted) {
lua_pushnumber(L, 1.0);
}
else {
lua_pushnil(L);
}
return 1;
} }
int32_t Script_AcceptContest(lua_State* L) { int32_t Script_AcceptContest(lua_State* L) {

View File

@ -0,0 +1,112 @@
#include "ui/simple/CSimpleCamera.hpp"
#include "model/Model2.hpp"
#include <tempest/Math.hpp>
namespace {
void FaceDirection(const C3Vector& direction, C3Vector& xPrime, C3Vector& yPrime, C3Vector& zPrime) {
STORM_ASSERT(CMath::fnotequal(direction.SquaredMag(), 0.0f));
// Forward
xPrime = direction;
// Right
if (CMath::fequal(xPrime.SquaredMag(), 0.0f)) {
yPrime.x = 1.0f;
yPrime.y = 0.0f;
yPrime.z = 0.0f;
} else {
yPrime.x = -xPrime.y;
yPrime.y = xPrime.x;
yPrime.z = 0.0f;
CMath::normalize(yPrime.x, yPrime.y);
}
// Up (Forward cross Right)
zPrime = C3Vector::Cross(xPrime, yPrime);
}
void BuildBillboardMatrix(const C3Vector& direction, C33Matrix& rotation) {
C3Vector xPrime = {};
C3Vector yPrime = {};
C3Vector zPrime = {};
FaceDirection(direction, xPrime, yPrime, zPrime);
// Forward
rotation.a0 = xPrime.x;
rotation.a1 = xPrime.y;
rotation.a2 = xPrime.z;
// Right
rotation.b0 = yPrime.x;
rotation.b1 = yPrime.y;
rotation.b2 = yPrime.z;
// Up
rotation.c0 = zPrime.x;
rotation.c1 = zPrime.y;
rotation.c2 = zPrime.z;
}
}
CSimpleCamera::CSimpleCamera(float nearZ, float farZ, float fov) {
this->m_scene = nullptr;
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 };
}
CM2Scene* CSimpleCamera::GetScene() {
if (!this->m_scene) {
this->m_scene = M2CreateScene();
}
return this->m_scene;
}
C3Vector CSimpleCamera::Right() const {
return { this->m_facing.b0, this->m_facing.b1, this->m_facing.b2 };
}
void CSimpleCamera::SetFacing(const C3Vector& forward) {
BuildBillboardMatrix(forward, this->m_facing);
}
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 };
}

View File

@ -0,0 +1,38 @@
#ifndef UI_SIMPLE_C_SIMPLE_CAMERA_HPP
#define UI_SIMPLE_C_SIMPLE_CAMERA_HPP
#include <tempest/Matrix.hpp>
#include <tempest/Vector.hpp>
class CM2Scene;
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);
CM2Scene* GetScene();
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
CM2Scene* m_scene;
C3Vector m_position;
C33Matrix m_facing;
float m_nearZ;
float m_farZ;
float m_fov;
float m_aspect;
};
#endif