mirror of
https://github.com/thunderbrewhq/thunderbrew
synced 2025-12-12 11:12:29 +00:00
feat: update CCharacterComponent and CCharacterCreation classes
This commit is contained in:
parent
971b781368
commit
f2a253f5ad
8 changed files with 348 additions and 22 deletions
|
|
@ -1,8 +1,114 @@
|
|||
#include "glue/CCharacterCreation.hpp"
|
||||
#include "glue/CCharacterComponent.hpp"
|
||||
#include "ui/CSimpleModelFFX.hpp"
|
||||
#include "model/CM2Model.hpp"
|
||||
#include "clientobject/Player_C.hpp"
|
||||
#include "db/Db.hpp"
|
||||
|
||||
float CCharacterCreation::m_charFacing = 0.0;
|
||||
CharacterCreationDisplay CCharacterCreation::m_character = {};
|
||||
int32_t CCharacterCreation::m_existingCharacterIndex;
|
||||
int32_t CCharacterCreation::m_raceIndex;
|
||||
CSimpleModel* CCharacterCreation::m_charCustomizeFrame;
|
||||
float CCharacterCreation::m_charFacing;
|
||||
uint32_t CCharacterCreation::m_prevSkinIndex;
|
||||
uint32_t CCharacterCreation::m_prevFaceIndex;
|
||||
uint32_t CCharacterCreation::m_prevHairColorIndex;
|
||||
uint32_t CCharacterCreation::m_prevHairStyleIndex;
|
||||
uint32_t CCharacterCreation::m_prevFacialFeatureIndex;
|
||||
CCharacterComponent* CCharacterCreation::m_character = nullptr;
|
||||
TSGrowableArray<uint32_t> CCharacterCreation::m_races;
|
||||
|
||||
void CCharacterCreation::Initialize() {
|
||||
CCharacterCreation::m_charFacing = 0.0;
|
||||
CCharacterCreation::m_charCustomizeFrame = nullptr;
|
||||
CCharacterCreation::m_existingCharacterIndex = -1;
|
||||
}
|
||||
|
||||
void CCharacterCreation::SetCharCustomizeFrame(CSimpleModel* frame) {
|
||||
CCharacterCreation::m_charCustomizeFrame = frame;
|
||||
}
|
||||
|
||||
void CCharacterCreation::SetCharCustomizeModel(char const* filename) {
|
||||
if (!CCharacterCreation::m_charCustomizeFrame || !filename || !*filename) {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO
|
||||
CCharacterCreation::m_charCustomizeFrame->SetModel(filename);
|
||||
}
|
||||
|
||||
void CCharacterCreation::ResetCharCustomizeInfo() {
|
||||
if (!CCharacterCreation::m_charCustomizeFrame) {
|
||||
return;
|
||||
}
|
||||
|
||||
CCharacterCreation::m_existingCharacterIndex = -1;
|
||||
|
||||
// TODO: CM2Model__DetachAllChildrenById
|
||||
|
||||
ComponentData data;
|
||||
CCharacterCreation::GetRandomRaceAndSex(&data);
|
||||
CCharacterCreation::CalcClasses(data.m_info.raceID);
|
||||
CCharacterCreation::InitCharacterComponent(&data, 1);
|
||||
|
||||
// TODO
|
||||
|
||||
CCharacterCreation::m_raceIndex = -1;
|
||||
|
||||
// TODO
|
||||
}
|
||||
|
||||
void CCharacterCreation::GetRandomRaceAndSex(ComponentData* data) {
|
||||
// TODO
|
||||
// WORKAROUND
|
||||
data->m_info.raceID = 1;
|
||||
}
|
||||
|
||||
void CCharacterCreation::CalcClasses(uint32_t raceID) {
|
||||
}
|
||||
|
||||
void CCharacterCreation::InitCharacterComponent(ComponentData* data, int32_t randomize) {
|
||||
auto record = Player_C_GetModelName(data->m_info.raceID, data->m_info.sexID);
|
||||
if (!record || !record->m_modelName[0]) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (CCharacterCreation::m_character) {
|
||||
auto model = CCharacterCreation::m_character->m_data.m_model;
|
||||
if (model->m_attachParent) {
|
||||
// TODO: model->DetachFromParent();
|
||||
}
|
||||
CCharacterComponent::FreeComponent(CCharacterCreation::m_character);
|
||||
}
|
||||
|
||||
CCharacterCreation::m_character = CCharacterComponent::AllocComponent();
|
||||
|
||||
auto scene = CCharacterCreation::m_charCustomizeFrame->GetScene();
|
||||
data->m_model = scene->CreateModel(record->m_modelName, 0);
|
||||
if (!data->m_model) {
|
||||
return;
|
||||
}
|
||||
|
||||
data->m_unkFlag |= 2u;
|
||||
CCharacterCreation::m_character->Init(data, nullptr);
|
||||
|
||||
if (randomize) {
|
||||
CCharacterCreation::RandomizeCharFeatures();
|
||||
}
|
||||
|
||||
// TODO
|
||||
}
|
||||
|
||||
void CCharacterCreation::RandomizeCharFeatures() {
|
||||
CCharacterCreation::m_character->SetRandomSkin();
|
||||
CCharacterCreation::m_character->SetRandomHairColor();
|
||||
CCharacterCreation::m_character->SetRandomHairStyle();
|
||||
CCharacterCreation::m_character->SetRandomFace();
|
||||
CCharacterCreation::m_character->SetRandomFacialFeature();
|
||||
|
||||
const auto& info = CCharacterCreation::m_character->m_data.m_info;
|
||||
CCharacterCreation::m_prevSkinIndex = info.skinID;
|
||||
CCharacterCreation::m_prevFaceIndex = info.faceID;
|
||||
CCharacterCreation::m_prevHairColorIndex = info.hairColorID;
|
||||
CCharacterCreation::m_prevHairStyleIndex = info.hairStyleID;
|
||||
CCharacterCreation::m_prevFacialFeatureIndex = info.facialFeatureID;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue