mirror of
https://github.com/isledecomp/isle.git
synced 2024-11-22 15:48:09 -05:00
Implement/match LegoAnimPresenter::FUN_10069b10 (#792)
This commit is contained in:
parent
f5e81777bc
commit
e43749c8bb
2 changed files with 64 additions and 20 deletions
|
@ -16,8 +16,8 @@ struct LegoAnimStructComparator {
|
|||
|
||||
// SIZE 0x08
|
||||
struct LegoAnimStruct {
|
||||
LegoROI* m_roi; // 0x00
|
||||
undefined4 m_unk0x04; // 0x04
|
||||
LegoROI* m_roi; // 0x00
|
||||
MxU32 m_index; // 0x04
|
||||
};
|
||||
|
||||
typedef map<const char*, LegoAnimStruct, LegoAnimStructComparator> LegoAnimPresenterMap;
|
||||
|
@ -62,8 +62,8 @@ class LegoAnimPresenter : public MxVideoPresenter {
|
|||
virtual void VTable0x94(); // vtable+0x94
|
||||
virtual void VTable0x98(); // vtable+0x98
|
||||
|
||||
// STUB: LEGO1 0x1000c990
|
||||
virtual undefined4* VTable0x9c(undefined4& p_unk0x6c)
|
||||
// FUNCTION: LEGO1 0x1000c990
|
||||
virtual LegoROI** VTable0x9c(MxU32& p_unk0x6c)
|
||||
{
|
||||
p_unk0x6c = m_unk0x6c;
|
||||
return m_unk0x68;
|
||||
|
@ -95,8 +95,8 @@ class LegoAnimPresenter : public MxVideoPresenter {
|
|||
void FUN_1006c8a0(LegoBool);
|
||||
|
||||
LegoAnim* m_anim; // 0x64
|
||||
undefined4* m_unk0x68; // 0x68
|
||||
undefined4 m_unk0x6c; // 0x6c
|
||||
LegoROI** m_unk0x68; // 0x68
|
||||
MxU32 m_unk0x6c; // 0x6c
|
||||
LegoROIList* m_unk0x70; // 0x70
|
||||
LegoROIList* m_unk0x74; // 0x74
|
||||
MxMatrix* m_unk0x78; // 0x78
|
||||
|
@ -104,9 +104,9 @@ class LegoAnimPresenter : public MxVideoPresenter {
|
|||
LegoWorld* m_currentWorld; // 0x80
|
||||
MxAtomId m_animAtom; // 0x84
|
||||
undefined4 m_unk0x88; // 0x88
|
||||
undefined4 m_unk0x8c; // 0x8c
|
||||
undefined4 m_unk0x90; // 0x90
|
||||
undefined m_unk0x94; // 0x94
|
||||
LegoROI** m_unk0x8c; // 0x8c
|
||||
const char** m_unk0x90; // 0x90
|
||||
MxU8 m_unk0x94; // 0x94
|
||||
undefined m_unk0x95; // 0x95
|
||||
MxBool m_unk0x96; // 0x96
|
||||
undefined m_unk0x97; // 0x97
|
||||
|
@ -121,6 +121,15 @@ class LegoAnimPresenter : public MxVideoPresenter {
|
|||
// SYNTHETIC: LEGO1 0x10068650
|
||||
// LegoAnimPresenter::`scalar deleting destructor'
|
||||
|
||||
// TEMPLATE: LEGO1 0x10069d80
|
||||
// _Tree<char const *,pair<char const * const,LegoAnimStruct>,map<char const *,LegoAnimStruct,LegoAnimStructComparator,allocator<LegoAnimStruct> >::_Kfn,LegoAnimStructComparator,allocator<LegoAnimStruct> >::~_Tree<char const *,pair<char const * const,LegoAni
|
||||
|
||||
// TEMPLATE: LEGO1 0x1006a320
|
||||
// Map<char const *,LegoAnimStruct,LegoAnimStructComparator>::~Map<char const *,LegoAnimStruct,LegoAnimStructComparator>
|
||||
|
||||
// TEMPLATE: LEGO1 0x1006a370
|
||||
// map<char const *,LegoAnimStruct,LegoAnimStructComparator,allocator<LegoAnimStruct> >::~map<char const *,LegoAnimStruct,LegoAnimStructComparator,allocator<LegoAnimStruct> >
|
||||
|
||||
// TEMPLATE: LEGO1 0x1006a750
|
||||
// _Tree<char const *,pair<char const * const,LegoAnimStruct>,map<char const *,LegoAnimStruct,LegoAnimStructComparator,allocator<LegoAnimStruct> >::_Kfn,LegoAnimStructComparator,allocator<LegoAnimStruct> >::iterator::_Dec
|
||||
|
||||
|
|
|
@ -45,8 +45,8 @@ void LegoAnimPresenter::Init()
|
|||
m_unk0x98 = 0;
|
||||
m_animAtom.Clear();
|
||||
m_unk0x9c = 0;
|
||||
m_unk0x8c = 0;
|
||||
m_unk0x90 = 0;
|
||||
m_unk0x8c = NULL;
|
||||
m_unk0x90 = NULL;
|
||||
m_unk0x94 = 0;
|
||||
m_unk0x96 = TRUE;
|
||||
m_unk0xa0 = 0;
|
||||
|
@ -313,10 +313,45 @@ LegoROI* LegoAnimPresenter::FUN_100699e0(const LegoChar*)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10069b10
|
||||
// FUNCTION: LEGO1 0x10069b10
|
||||
void LegoAnimPresenter::FUN_10069b10()
|
||||
{
|
||||
// TODO
|
||||
LegoAnimPresenterMap map;
|
||||
|
||||
if (m_unk0x8c != NULL) {
|
||||
memset(m_unk0x8c, 0, m_unk0x94 * sizeof(*m_unk0x8c));
|
||||
}
|
||||
|
||||
FUN_1006a3c0(map, m_anim->GetRoot(), NULL);
|
||||
|
||||
if (m_unk0x68 != NULL) {
|
||||
delete[] m_unk0x68;
|
||||
m_unk0x6c = 0;
|
||||
}
|
||||
|
||||
m_unk0x6c = 0;
|
||||
m_unk0x68 = new LegoROI*[map.size() + 1];
|
||||
memset(m_unk0x68, 0, (map.size() + 1) * sizeof(*m_unk0x68));
|
||||
|
||||
for (LegoAnimPresenterMap::iterator it = map.begin(); it != map.end();) {
|
||||
MxU32 index = (*it).second.m_index;
|
||||
m_unk0x68[index] = (*it).second.m_roi;
|
||||
|
||||
if (m_unk0x68[index]->GetName() != NULL) {
|
||||
for (MxS32 i = 0; i < m_unk0x94; i++) {
|
||||
if (m_unk0x8c[i] == NULL && m_unk0x90[i] != NULL) {
|
||||
if (!strcmpi(m_unk0x90[i], m_unk0x68[index]->GetName())) {
|
||||
m_unk0x8c[i] = m_unk0x68[index];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete[] const_cast<char*>((*it).first);
|
||||
it++;
|
||||
m_unk0x6c++;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1006a3c0
|
||||
|
@ -384,10 +419,10 @@ void LegoAnimPresenter::FUN_1006a4f0(
|
|||
it = p_map.find(p_und);
|
||||
if (it == p_map.end()) {
|
||||
LegoAnimStruct animStruct;
|
||||
animStruct.m_unk0x04 = p_map.size() + 1;
|
||||
animStruct.m_index = p_map.size() + 1;
|
||||
animStruct.m_roi = p_roi;
|
||||
|
||||
p_data->SetUnknown0x20(animStruct.m_unk0x04);
|
||||
p_data->SetUnknown0x20(animStruct.m_index);
|
||||
|
||||
LegoChar* und = new LegoChar[strlen(p_und) + 1];
|
||||
strcpy(und, p_und);
|
||||
|
@ -395,7 +430,7 @@ void LegoAnimPresenter::FUN_1006a4f0(
|
|||
p_map[und] = animStruct;
|
||||
}
|
||||
else {
|
||||
p_data->SetUnknown0x20((*it).second.m_unk0x04);
|
||||
p_data->SetUnknown0x20((*it).second.m_index);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -469,12 +504,12 @@ void LegoAnimPresenter::StartingTickle()
|
|||
m_unk0x78 = new MxMatrix();
|
||||
CalcLocalTransform(m_action->GetLocation(), m_action->GetDirection(), m_action->GetUp(), *m_unk0x78);
|
||||
}
|
||||
else if (m_unk0x68) {
|
||||
MxU8* und = (MxU8*) m_unk0x68[1];
|
||||
else if (m_unk0x68 != NULL) {
|
||||
LegoROI* roi = m_unk0x68[1];
|
||||
|
||||
if (und) {
|
||||
if (roi != NULL) {
|
||||
MxMatrix mat;
|
||||
mat = *(Matrix4*) (und + 0x10);
|
||||
mat = roi->GetLocal2World();
|
||||
m_unk0x78 = new MxMatrix(mat);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue