Implement/match LegoPartPresenter::Read (#642)

* WIP

* Match

* Remove TODO

* Fix
This commit is contained in:
Christian Semmler
2024-03-09 12:27:53 -05:00
committed by GitHub
parent 9e2f37e7ca
commit 9f875d01e5
8 changed files with 311 additions and 8 deletions

View File

@@ -0,0 +1,52 @@
#ifndef LEGOLODLIST_H
#define LEGOLODLIST_H
#include "mxlist.h"
#include "roi/legolod.h"
#pragma warning(disable : 4786)
// VTABLE: LEGO1 0x100d9d30
// class MxCollection<LegoLOD *>
// VTABLE: LEGO1 0x100d9d48
// class MxList<LegoLOD *>
// VTABLE: LEGO1 0x100d9d60
// class MxPtrList<LegoLOD>
// VTABLE: LEGO1 0x100d9d78
// SIZE 0x18
class LegoLODList : public MxPtrList<LegoLOD> {
public:
LegoLODList() : MxPtrList<LegoLOD>(FALSE) {}
// SYNTHETIC: LEGO1 0x1007de40
// LegoLODList::`scalar deleting destructor'
};
// TEMPLATE: LEGO1 0x1007d480
// MxCollection<LegoLOD *>::Compare
// TEMPLATE: LEGO1 0x1007d490
// MxCollection<LegoLOD *>::~MxCollection<LegoLOD *>
// TEMPLATE: LEGO1 0x1007d4e0
// MxCollection<LegoLOD *>::Destroy
// TEMPLATE: LEGO1 0x1007d4f0
// MxList<LegoLOD *>::~MxList<LegoLOD *>
// SYNTHETIC: LEGO1 0x1007d580
// MxCollection<LegoLOD *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1007d5f0
// MxList<LegoLOD *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1007d6a0
// MxPtrList<LegoLOD>::`scalar deleting destructor'
// TEMPLATE: LEGO1 0x1007d710
// MxPtrList<LegoLOD>::~MxPtrList<LegoLOD>
#endif // LEGOLODLIST_H

View File

@@ -0,0 +1,26 @@
#ifndef LEGONAMEDPART_H
#define LEGONAMEDPART_H
#include "legolodlist.h"
#include "mxstring.h"
// SIZE 0x14
class LegoNamedPart {
public:
LegoNamedPart(const char* p_name, LegoLODList* p_list)
{
m_name = p_name;
m_list = p_list;
}
~LegoNamedPart() { delete m_list; }
const MxString* GetName() const { return &m_name; }
LegoLODList* GetList() { return m_list; }
private:
MxString m_name; // 0x00
LegoLODList* m_list; // 0x04
};
#endif // LEGONAMEDPART_H

View File

@@ -0,0 +1,53 @@
#ifndef LEGONAMEDPARTLIST_H
#define LEGONAMEDPARTLIST_H
#include "legonamedpart.h"
#include "mxlist.h"
// VTABLE: LEGO1 0x100d9d90
// class MxCollection<LegoNamedPart *>
// VTABLE: LEGO1 0x100d9da8
// class MxList<LegoNamedPart *>
// VTABLE: LEGO1 0x100d9dc0
// class MxPtrList<LegoNamedPart>
// VTABLE: LEGO1 0x100d9dd8
// SIZE 0x18
class LegoNamedPartList : public MxPtrList<LegoNamedPart> {
public:
LegoNamedPartList() : MxPtrList<LegoNamedPart>(TRUE) {}
// SYNTHETIC: LEGO1 0x1007dbf0
// LegoNamedPartList::`scalar deleting destructor'
};
// TEMPLATE: LEGO1 0x1007d760
// MxCollection<LegoNamedPart *>::Compare
// TEMPLATE: LEGO1 0x1007d770
// MxCollection<LegoNamedPart *>::~MxCollection<LegoNamedPart *>
// TEMPLATE: LEGO1 0x1007d7c0
// MxCollection<LegoNamedPart *>::Destroy
// TEMPLATE: LEGO1 0x1007d7d0
// MxList<LegoNamedPart *>::~MxList<LegoNamedPart *>
// TEMPLATE: LEGO1 0x1007d860
// MxPtrList<LegoNamedPart>::Destroy
// TEMPLATE: LEGO1 0x1007dc60
// MxPtrList<LegoNamedPart>::~MxPtrList<LegoNamedPart>
// SYNTHETIC: LEGO1 0x1007dcb0
// MxCollection<LegoNamedPart *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1007dd20
// MxList<LegoNamedPart *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1007ddd0
// MxPtrList<LegoNamedPart>::`scalar deleting destructor'
#endif // LEGONAMEDPARTLIST_H

View File

@@ -1,6 +1,7 @@
#ifndef LEGOPARTPRESENTER_H
#define LEGOPARTPRESENTER_H
#include "legonamedpartlist.h"
#include "mxmediapresenter.h"
// VTABLE: LEGO1 0x100d4df0
@@ -34,7 +35,7 @@ public:
// SYNTHETIC: LEGO1 0x1000d060
// LegoPartPresenter::`scalar deleting destructor'
inline void Reset() { m_partData = NULL; }
inline void Reset() { m_parts = NULL; }
MxResult Read(MxDSChunk& p_chunk);
void FUN_1007df20();
@@ -42,7 +43,7 @@ public:
private:
void Destroy(MxBool p_fromDestructor);
MxDSChunk* m_partData; // 0x54
LegoNamedPartList* m_parts; // 0x50
};
#endif // LEGOPARTPRESENTER_H

View File

@@ -37,14 +37,15 @@ public:
MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
void VTable0x60(MxPresenter* p_presenter) override; // vtable+0x60
MxResult FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile);
MxResult FUN_100674b0(ModelDbModel& p_model, FILE* p_wdbFile, LegoWorld* p_world);
MxResult LoadWorld(char* p_worldName, LegoWorld* p_world);
// SYNTHETIC: LEGO1 0x10066750
// LegoWorldPresenter::`scalar deleting destructor'
private:
MxResult FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile);
MxResult FUN_100674b0(ModelDbModel& p_model, FILE* p_wdbFile, LegoWorld* p_world);
undefined4 m_unk0x50;
};