feat(glue): partially implement CCharacterCreation::CreateComponent

This commit is contained in:
fallenoak 2025-12-29 09:15:58 -06:00
parent 5ea18cc298
commit 84fea67268
No known key found for this signature in database
GPG Key ID: 7628F8E61AEA070D
2 changed files with 60 additions and 0 deletions

View File

@ -1,6 +1,9 @@
#include "glue/CCharacterCreation.hpp" #include "glue/CCharacterCreation.hpp"
#include "component/CCharacterComponent.hpp"
#include "component/Types.hpp" #include "component/Types.hpp"
#include "db/Db.hpp"
#include "glue/CGlueLoading.hpp" #include "glue/CGlueLoading.hpp"
#include "object/client/Player_C.hpp"
#include "ui/simple/CSimpleModelFFX.hpp" #include "ui/simple/CSimpleModelFFX.hpp"
CCharacterComponent* CCharacterCreation::s_character; CCharacterComponent* CCharacterCreation::s_character;
@ -14,6 +17,60 @@ void CCharacterCreation::CalcClasses(int32_t raceID) {
} }
void CCharacterCreation::CreateComponent(ComponentData* data, bool randomize) { void CCharacterCreation::CreateComponent(ComponentData* data, bool randomize) {
auto modelData = Player_C_GetModelName(data->raceID, data->sexID);
if (!modelData || !modelData->m_modelName) {
return;
}
auto existingComponent = CCharacterCreation::s_character;
if (existingComponent) {
auto model = existingComponent->m_data.model;
if (model->m_attachParent) {
model->DetachFromParent();
}
// TODO CCharacterComponent::FreeComponent(existingComponent);
}
CCharacterCreation::s_character = CCharacterComponent::AllocComponent();
auto scene = CCharacterCreation::s_charCustomizeFrame->GetScene();
auto model = scene->CreateModel(modelData->m_modelName, 0);
data->model = model;
if (!model) {
return;
}
// TODO lighting
data->model->SetBoneSequence(-1, 0, 0, 0, 1.0f, 1, 1);
data->flags |= 0x2;
CCharacterCreation::s_character->Init(data, nullptr);
if (randomize) {
// TODO select random variations
}
// TODO track previous variations
// TODO set facing
CCharacterCreation::Dress();
CCharacterCreation::s_character->RenderPrep(0);
if (CCharacterCreation::s_charCustomizeFrame->m_model) {
model->AttachToParent(CCharacterCreation::s_charCustomizeFrame->m_model, 0, nullptr, 0);
}
}
void CCharacterCreation::Dress() {
// TODO // TODO
} }
@ -24,6 +81,8 @@ int32_t CCharacterCreation::GetRandomClassID() {
void CCharacterCreation::GetRandomRaceAndSex(ComponentData* data) { void CCharacterCreation::GetRandomRaceAndSex(ComponentData* data) {
// TODO // TODO
data->raceID = 1;
data->sexID = UNITSEX_MALE;
} }
void CCharacterCreation::ResetCharCustomizeInfo() { void CCharacterCreation::ResetCharCustomizeInfo() {

View File

@ -19,6 +19,7 @@ class CCharacterCreation {
// Static functions // Static functions
static void CalcClasses(int32_t raceID); static void CalcClasses(int32_t raceID);
static void CreateComponent(ComponentData* data, bool randomize); static void CreateComponent(ComponentData* data, bool randomize);
static void Dress();
static int32_t GetRandomClassID(); static int32_t GetRandomClassID();
static void GetRandomRaceAndSex(ComponentData* data); static void GetRandomRaceAndSex(ComponentData* data);
static void ResetCharCustomizeInfo(); static void ResetCharCustomizeInfo();