feat(glue): implement CCharacterCreation::SetSelectedRace and CSimpleCheckbox::SetChecked

This commit is contained in:
VDm 2025-06-22 03:44:55 +04:00
parent 386edba3d1
commit e7434860ff
5 changed files with 135 additions and 8 deletions

View file

@ -1,5 +1,6 @@
#include "ui/CSimpleCheckbox.hpp"
#include "ui/CSimpleCheckboxScript.hpp"
#include "ui/CSimpleTexture.hpp"
int32_t CSimpleCheckbox::s_metatable;
int32_t CSimpleCheckbox::s_objectType;
@ -23,14 +24,53 @@ void CSimpleCheckbox::RegisterScriptMethods(lua_State* L) {
FrameScript_Object::FillScriptMethodTable(L, SimpleCheckboxMethods, NUM_SIMPLE_CHECKBOX_SCRIPT_METHODS);
}
CSimpleCheckbox::CSimpleCheckbox(CSimpleFrame* parent) : CSimpleButton(parent) {
// TODO
CSimpleCheckbox::CSimpleCheckbox(CSimpleFrame* parent)
: CSimpleButton(parent) {
}
int32_t CSimpleCheckbox::GetScriptMetaTable() {
return CSimpleCheckbox::s_metatable;
}
void CSimpleCheckbox::Enable(int32_t enabled) {
this->CSimpleButton::Enable(enabled);
this->SetChecked(this->m_checked, 1);
}
void CSimpleCheckbox::SetChecked(int32_t state, int32_t force) {
if (state == this->m_checked && !force) {
return;
}
this->m_checked = state;
if (this->m_checkedTexture) {
this->m_checkedTexture->Hide();
}
if (this->m_disabledTexture) {
this->m_disabledTexture->Hide();
}
if (this->m_checked) {
if (!this->m_disabledTexture || this->m_state) {
if (this->m_checkedTexture) {
this->m_checkedTexture->Show();
}
} else {
this->m_disabledTexture->Show();
}
}
}
int32_t CSimpleCheckbox::GetChecked() {
return this->m_checked;
}
void CSimpleCheckbox::OnClick(const char* btn, int32_t a3) {
this->SetChecked(this->m_checked == 0, 0);
this->CSimpleButton::OnClick(btn, a3);
}
bool CSimpleCheckbox::IsA(int32_t type) {
return type == CSimpleCheckbox::s_objectType
|| type == CSimpleButton::s_objectType

View file

@ -15,10 +15,17 @@ class CSimpleCheckbox : public CSimpleButton {
static void RegisterScriptMethods(lua_State* L);
// Member variables
int32_t m_checked = 0;
CSimpleTexture* m_checkedTexture = nullptr;
CSimpleTexture* m_disabledTexture = nullptr;
// Virtual member functions
virtual bool IsA(int32_t type);
virtual int32_t GetScriptMetaTable();
virtual void Enable(int32_t enabled);
virtual void SetChecked(int32_t state, int32_t force);
virtual int32_t GetChecked();
virtual void OnClick(const char* btn, int32_t a3);
// Member functions
CSimpleCheckbox(CSimpleFrame* parent);

View file

@ -1,13 +1,26 @@
#include "ui/CSimpleCheckboxScript.hpp"
#include "ui/CSimpleCheckbox.hpp"
#include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include "util/Unimplemented.hpp"
#include <cstdint>
int32_t CSimpleCheckbox_SetChecked(lua_State* L) {
WHOA_UNIMPLEMENTED(0);
auto type = CSimpleCheckbox::GetObjectType();
auto checkbox = static_cast<CSimpleCheckbox*>(FrameScript_GetObjectThis(L, type));
int32_t state = StringToBOOL(L, 2, 0);
checkbox->SetChecked(state, 0);
return 0;
}
int32_t CSimpleCheckbox_GetChecked(lua_State* L) {
WHOA_UNIMPLEMENTED(0);
auto type = CSimpleCheckbox::GetObjectType();
auto checkbox = static_cast<CSimpleCheckbox*>(FrameScript_GetObjectThis(L, type));
lua_Number state = checkbox->GetChecked() ? 1.0 : 0.0;
lua_pushnumber(L, state);
return 1;
}
int32_t CSimpleCheckbox_GetCheckedTexture(lua_State* L) {