mirror of
https://github.com/isledecomp/isle.git
synced 2024-11-22 07:37:59 -05:00
Imlpement/match LegoAnimMMPresenter::ParseExtra and related (#822)
* Imlpement/match LegoAnimMMPresenter::ParseExtra and related * sort
This commit is contained in:
parent
2ce9ff06fc
commit
5021f66de2
6 changed files with 114 additions and 36 deletions
|
@ -87,6 +87,7 @@ class LegoAnimationManager : public MxCore {
|
|||
);
|
||||
void FUN_10061010(undefined4);
|
||||
void FUN_100617c0(MxS32, MxU16&, MxU32&);
|
||||
LegoTranInfo* GetTranInfo(MxU32 p_index);
|
||||
MxS8 FUN_10062360(char*);
|
||||
void FUN_10062770();
|
||||
void FUN_100627d0(MxBool);
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "mxcompositepresenter.h"
|
||||
|
||||
class LegoWorld;
|
||||
struct LegoTranInfo;
|
||||
|
||||
// VTABLE: LEGO1 0x100d7de8
|
||||
// SIZE 0x74
|
||||
|
@ -46,9 +47,9 @@ class LegoAnimMMPresenter : public MxCompositePresenter {
|
|||
undefined4 m_unk0x50; // 0x50
|
||||
undefined4 m_unk0x54; // 0x54
|
||||
undefined m_unk0x58; // 0x58
|
||||
undefined m_unk0x59; // 0x59
|
||||
undefined4 m_unk0x5c; // 0x5c
|
||||
undefined4 m_unk0x60; // 0x60
|
||||
MxBool m_unk0x59; // 0x59
|
||||
MxU32 m_animmanId; // 0x5c
|
||||
LegoTranInfo* m_tranInfo; // 0x60
|
||||
LegoWorld* m_unk0x64; // 0x64
|
||||
undefined4 m_unk0x68; // 0x68
|
||||
undefined4 m_unk0x6c; // 0x6c
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#include "decomp.h"
|
||||
#include "mxgeometry/mxmatrix.h"
|
||||
|
||||
class LegoAnimMMPresenter;
|
||||
|
||||
// SIZE 0x78
|
||||
struct LegoTranInfo {
|
||||
enum {
|
||||
|
@ -20,7 +22,7 @@ struct LegoTranInfo {
|
|||
m_unk0x14 = FALSE;
|
||||
m_unk0x1c = NULL;
|
||||
m_unk0x20 = NULL;
|
||||
m_unk0x24 = 0;
|
||||
m_presenter = NULL;
|
||||
m_unk0x15 = TRUE;
|
||||
m_unk0x28 = TRUE;
|
||||
m_unk0x29 = TRUE;
|
||||
|
@ -39,7 +41,7 @@ struct LegoTranInfo {
|
|||
MxU32 m_objectId; // 0x18
|
||||
undefined4* m_unk0x1c; // 0x1c
|
||||
undefined4* m_unk0x20; // 0x20
|
||||
undefined4 m_unk0x24; // 0x24
|
||||
LegoAnimMMPresenter* m_presenter; // 0x24
|
||||
MxBool m_unk0x28; // 0x28
|
||||
MxBool m_unk0x29; // 0x29
|
||||
MxMatrix m_unk0x2c; // 0x2c
|
||||
|
|
|
@ -21,6 +21,19 @@ class LegoTranInfoList : public MxPtrList<LegoTranInfo> {
|
|||
LegoTranInfoList() : MxPtrList<LegoTranInfo>(FALSE) {}
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d8cf0
|
||||
// class MxListCursor<LegoTranInfo *>
|
||||
|
||||
// VTABLE: LEGO1 0x100d8d08
|
||||
// class MxPtrListCursor<LegoTranInfo>
|
||||
|
||||
// VTABLE: LEGO1 0x100d8d20
|
||||
// SIZE 0x10
|
||||
class LegoTranInfoListCursor : public MxPtrListCursor<LegoTranInfo> {
|
||||
public:
|
||||
LegoTranInfoListCursor(LegoTranInfoList* p_list) : MxPtrListCursor<LegoTranInfo>(p_list) {}
|
||||
};
|
||||
|
||||
// TEMPLATE: LEGO1 0x1005fdf0
|
||||
// MxCollection<LegoTranInfo *>::Compare
|
||||
|
||||
|
@ -48,4 +61,22 @@ class LegoTranInfoList : public MxPtrList<LegoTranInfo> {
|
|||
// SYNTHETIC: LEGO1 0x100600d0
|
||||
// MxPtrList<LegoTranInfo>::`scalar deleting destructor'
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100612f0
|
||||
// LegoTranInfoListCursor::`scalar deleting destructor'
|
||||
|
||||
// FUNCTION: LEGO1 0x10061360
|
||||
// MxPtrListCursor<LegoTranInfo>::~MxPtrListCursor<LegoTranInfo>
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100613b0
|
||||
// MxListCursor<LegoTranInfo *>::`scalar deleting destructor'
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10061420
|
||||
// MxPtrListCursor<LegoTranInfo>::`scalar deleting destructor'
|
||||
|
||||
// FUNCTION: LEGO1 0x10061490
|
||||
// MxListCursor<LegoTranInfo *>::~MxListCursor<LegoTranInfo *>
|
||||
|
||||
// FUNCTION: LEGO1 0x100614e0
|
||||
// LegoTranInfoListCursor::~LegoTranInfoListCursor
|
||||
|
||||
#endif // LEGOTRANINFOLIST_H
|
||||
|
|
|
@ -564,6 +564,24 @@ void LegoAnimationManager::FUN_100617c0(MxS32, MxU16&, MxU32&)
|
|||
// TODO
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100618f0
|
||||
// FUNCTION: BETA10 0x100425f0
|
||||
LegoTranInfo* LegoAnimationManager::GetTranInfo(MxU32 p_index)
|
||||
{
|
||||
if (m_tranInfoList != NULL) {
|
||||
LegoTranInfoListCursor cursor(m_tranInfoList);
|
||||
LegoTranInfo* tranInfo;
|
||||
|
||||
while (cursor.Next(tranInfo)) {
|
||||
if (tranInfo->m_index == p_index) {
|
||||
return tranInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100619f0
|
||||
MxLong LegoAnimationManager::Notify(MxParam& p_param)
|
||||
{
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#include "legoanimmmpresenter.h"
|
||||
|
||||
#include "decomp.h"
|
||||
#include "define.h"
|
||||
#include "legoanimationmanager.h"
|
||||
#include "legotraninfo.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "legoworld.h"
|
||||
#include "misc.h"
|
||||
|
@ -9,6 +12,7 @@
|
|||
#include "mxmisc.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxobjectfactory.h"
|
||||
#include "mxutilities.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoAnimMMPresenter, 0x74)
|
||||
|
||||
|
@ -16,9 +20,9 @@ DECOMP_SIZE_ASSERT(LegoAnimMMPresenter, 0x74)
|
|||
LegoAnimMMPresenter::LegoAnimMMPresenter()
|
||||
{
|
||||
m_unk0x4c = NULL;
|
||||
m_unk0x5c = 0;
|
||||
m_unk0x59 = 0;
|
||||
m_unk0x60 = 0;
|
||||
m_animmanId = 0;
|
||||
m_unk0x59 = FALSE;
|
||||
m_tranInfo = NULL;
|
||||
m_unk0x54 = 0;
|
||||
m_unk0x64 = NULL;
|
||||
m_unk0x68 = 0;
|
||||
|
@ -143,15 +147,36 @@ void LegoAnimMMPresenter::VTable0x60(MxPresenter* p_presenter)
|
|||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1004b390
|
||||
// FUNCTION: LEGO1 0x1004b390
|
||||
// FUNCTION: BETA10 0x1004c5be
|
||||
void LegoAnimMMPresenter::ParseExtra()
|
||||
{
|
||||
// TODO
|
||||
MxU16 extraLength;
|
||||
char* extraData;
|
||||
m_action->GetExtra(extraLength, extraData);
|
||||
|
||||
if (extraLength & MAXWORD) {
|
||||
char extraCopy[1024];
|
||||
memcpy(extraCopy, extraData, extraLength & MAXWORD);
|
||||
extraCopy[extraLength & MAXWORD] = '\0';
|
||||
|
||||
char output[1024];
|
||||
if (KeyValueStringParse(output, g_strANIMMAN_ID, extraCopy)) {
|
||||
char* token = strtok(output, g_parseExtraTokens);
|
||||
m_animmanId = atoi(token);
|
||||
m_tranInfo = AnimationManager()->GetTranInfo(m_animmanId);
|
||||
|
||||
if (m_tranInfo != NULL) {
|
||||
m_unk0x59 = m_tranInfo->m_unk0x10;
|
||||
m_tranInfo->m_presenter = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1004b8b0
|
||||
// FUNCTION: LEGO1 0x1004b8b0
|
||||
// FUNCTION: BETA10 0x1004d104
|
||||
MxBool LegoAnimMMPresenter::FUN_1004b8b0()
|
||||
{
|
||||
// TODO
|
||||
return FALSE;
|
||||
return m_tranInfo != NULL ? m_tranInfo->m_unk0x28 : TRUE;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue