Implement/match LegoCharacterManager::FUN_10085210

This commit is contained in:
Christian Semmler 2024-03-31 09:48:10 -04:00
parent a956b19ac6
commit 4fcbc8d807
2 changed files with 75 additions and 7 deletions

View File

@ -58,13 +58,14 @@ class LegoCharacterManager {
LegoCharacterData* GetData(LegoROI* p_roi); LegoCharacterData* GetData(LegoROI* p_roi);
MxBool FUN_10084ec0(LegoROI* p_roi); MxBool FUN_10084ec0(LegoROI* p_roi);
MxU32 FUN_10085140(LegoROI* p_roi, MxBool p_und); MxU32 FUN_10085140(LegoROI* p_roi, MxBool p_und);
LegoROI* FUN_10085210(const char*, char*, undefined); LegoROI* FUN_10085210(const char*, const char*, MxBool p_createEntity);
LegoROI* FUN_10085a80(char* p_und1, char* p_und2, undefined p_und3); LegoROI* FUN_10085a80(const char* p_und1, const char* p_roiName, MxBool p_createEntity);
static const char* GetCustomizeAnimFile() { return g_customizeAnimFile; } static const char* GetCustomizeAnimFile() { return g_customizeAnimFile; }
private: private:
LegoROI* CreateROI(const char* p_key); LegoROI* CreateROI(const char* p_key);
MxResult FUN_10085870(LegoROI* p_roi);
static char* g_customizeAnimFile; static char* g_customizeAnimFile;
@ -100,6 +101,9 @@ class LegoCharacterManager {
// TEMPLATE: LEGO1 0x10083890 // TEMPLATE: LEGO1 0x10083890
// _Tree<char const *,pair<char const * const,LegoCharacter *>,map<char const *,LegoCharacter *,LegoCharacterComparator,allocator<LegoCharacter *> >::_Kfn,LegoCharacterComparator,allocator<LegoCharacter *> >::_Insert // _Tree<char const *,pair<char const * const,LegoCharacter *>,map<char const *,LegoCharacter *,LegoCharacterComparator,allocator<LegoCharacter *> >::_Kfn,LegoCharacterComparator,allocator<LegoCharacter *> >::_Insert
// TEMPLATE: LEGO1 0x10085500
// _Tree<char const *,pair<char const * const,LegoCharacter *>,map<char const *,LegoCharacter *,LegoCharacterComparator,allocator<LegoCharacter *> >::_Kfn,LegoCharacterComparator,allocator<LegoCharacter *> >::insert
// GLOBAL: LEGO1 0x100fc508 // GLOBAL: LEGO1 0x100fc508
// _Tree<char const *,pair<char const * const,LegoCharacter *>,map<char const *,LegoCharacter *,LegoCharacterComparator,allocator<LegoCharacter *> >::_Kfn,LegoCharacterComparator,allocator<LegoCharacter *> >::_Nil // _Tree<char const *,pair<char const * const,LegoCharacter *>,map<char const *,LegoCharacter *,LegoCharacterComparator,allocator<LegoCharacter *> >::_Kfn,LegoCharacterComparator,allocator<LegoCharacter *> >::_Nil
// clang-format on // clang-format on

View File

@ -23,6 +23,9 @@ MxU32 g_unk0x100fc4d8 = 50;
// GLOBAL: LEGO1 0x100fc4dc // GLOBAL: LEGO1 0x100fc4dc
MxU32 g_unk0x100fc4dc = 66; MxU32 g_unk0x100fc4dc = 66;
// GLOBAL: LEGO1 0x100fc4f0
MxU32 g_unk0x100fc4f0 = 0;
// GLOBAL: LEGO1 0x10104f20 // GLOBAL: LEGO1 0x10104f20
LegoCharacterData g_characterData[66]; LegoCharacterData g_characterData[66];
@ -491,14 +494,75 @@ void LegoCharacterManager::SetCustomizeAnimFile(const char* p_value)
} }
} }
// STUB: LEGO1 0x10085210 // FUNCTION: LEGO1 0x10085210
LegoROI* LegoCharacterManager::FUN_10085210(const char*, char*, undefined) LegoROI* LegoCharacterManager::FUN_10085210(const char* p_name, const char* p_roiName, MxBool p_createEntity)
{ {
LegoROI* roi = NULL;
MxMatrix mat;
Tgl::Renderer* renderer = VideoManager()->GetRenderer();
ViewLODListManager* lodManager = GetViewLODListManager();
LegoTextureContainer* textureContainer = TextureContainer();
ViewLODList* lodList = lodManager->Lookup(p_roiName);
if (lodList == NULL || lodList->Size() == 0) {
return NULL; return NULL;
}
roi = new LegoROI(renderer, lodList);
const char* name;
char buf[20];
if (p_name != NULL) {
name = p_name;
}
else {
sprintf(buf, "autoROI_%d", g_unk0x100fc4f0++);
name = buf;
}
roi->SetName(name);
lodList->Release();
if (roi != NULL && FUN_10085870(roi) != SUCCESS) {
delete roi;
roi = NULL;
}
if (roi != NULL) {
roi->SetVisibility(FALSE);
LegoCharacter* character = new LegoCharacter(roi);
char* key = new char[strlen(name) + 1];
if (key != NULL) {
strcpy(key, name);
(*m_characters)[key] = character;
VideoManager()->Get3DManager()->Add(*roi);
if (p_createEntity && roi->GetEntity() == NULL) {
LegoEntity* entity = new LegoEntity();
entity->SetROI(roi, FALSE, FALSE);
entity->FUN_100114e0(4);
entity->SetFlag(LegoActor::c_bit2);
}
}
}
return roi;
}
// STUB: LEGO1 0x10085870
MxResult LegoCharacterManager::FUN_10085870(LegoROI* p_roi)
{
// TODO
return SUCCESS;
} }
// FUNCTION: LEGO1 0x10085a80 // FUNCTION: LEGO1 0x10085a80
LegoROI* LegoCharacterManager::FUN_10085a80(char* p_und1, char* p_und2, undefined p_und3) LegoROI* LegoCharacterManager::FUN_10085a80(const char* p_name, const char* p_roiName, MxBool p_createEntity)
{ {
return FUN_10085210(p_und1, p_und2, p_und3); return FUN_10085210(p_name, p_roiName, p_createEntity);
} }