Implement/Match LegoTree (#485)

* Implement/Match LegoTree

* Fix vtable

* Fixes

---------

Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
Nathan M Gilbert
2024-01-28 11:45:49 -05:00
committed by GitHub
parent 4137cd75e6
commit c0acf11f9b
5 changed files with 204 additions and 58 deletions

View File

@@ -2,6 +2,7 @@
#define LEGOANIMPRESENTER_H
#include "lego/sources/misc/legostorage.h"
#include "lego/sources/misc/legotree.h"
#include "mxgeometry/mxgeometry3d.h"
#include "mxvideopresenter.h"
@@ -75,37 +76,20 @@ protected:
// SYNTHETIC: LEGO1 0x10068650
// LegoAnimPresenter::`scalar deleting destructor'
// VTABLE: LEGO1 0x100db768
// SIZE 0x08
class LegoAnimClassBase {
public:
LegoAnimClassBase();
virtual ~LegoAnimClassBase();
virtual void VTable0x4(); // vtable+0x04
virtual void VTable0x8(); // vtable+0x08
virtual void VTable0xc(); // vtable+0x0c
undefined4 m_unk0x4; // 0x04
};
// SYNTHETIC: LEGO1 0x10099de0
// LegoAnimClassBase::`scalar deleting destructor'
// VTABLE: LEGO1 0x100db8d8
// SIZE 0x18
class LegoAnimClass : public LegoAnimClassBase {
class LegoAnimClass : public LegoTree {
public:
LegoAnimClass();
virtual ~LegoAnimClass() override;
virtual void VTable0x8() override; // vtable+0x08
virtual void VTable0xc() override; // vtable+0x0c
virtual MxResult VTable0x10(LegoMemory* p_stream, MxS32); // vtable+0x10
virtual LegoResult Write(LegoStorage* p_storage) override; // vtable+0x08
virtual LegoTreeNodeData* CreateData() override; // vtable+0x0c
virtual MxResult VTable0x10(LegoMemory* p_stream, MxS32); // vtable+0x10
inline MxLong GetUnknown0x8() { return m_unk0x8; }
// private:
private:
MxLong m_unk0x8; // 0x08
undefined4 m_unk0xc; // 0x0c
undefined4 m_unk0x10; // 0x10

View File

@@ -8,7 +8,6 @@
#include "mxvideomanager.h"
DECOMP_SIZE_ASSERT(LegoAnimPresenter, 0xc0)
DECOMP_SIZE_ASSERT(LegoAnimClassBase, 0x08)
DECOMP_SIZE_ASSERT(LegoAnimClass, 0x18)
// FUNCTION: LEGO1 0x10068420
@@ -140,12 +139,7 @@ void LegoAnimPresenter::StreamingTickle()
m_subscriber->DestroyChunk(chunk);
}
if (m_unk0x95 == 0) {
if (m_unk0x64->m_unk0x8 + m_action->GetStartTime() < m_action->GetElapsedTime()) {
m_unk0x95 = 1;
}
}
else {
if (m_unk0x95) {
ProgressTickleState(e_done);
if (m_compositePresenter) {
if (m_compositePresenter->IsA("LegoAnimMMPresenter")) {
@@ -153,6 +147,11 @@ void LegoAnimPresenter::StreamingTickle()
}
}
}
else {
if (m_action->GetElapsedTime() > m_unk0x64->GetUnknown0x8() + m_action->GetStartTime()) {
m_unk0x95 = 1;
}
}
}
// STUB: LEGO1 0x1006b8c0
@@ -200,33 +199,6 @@ void LegoAnimPresenter::EndAction()
MxVideoPresenter::EndAction();
}
// FUNCTION: LEGO1 0x10099dd0
LegoAnimClassBase::LegoAnimClassBase()
{
m_unk0x4 = 0;
}
// STUB: LEGO1 0x10099e00
LegoAnimClassBase::~LegoAnimClassBase()
{
// TODO
}
// STUB: LEGO1 0x10099e20
void LegoAnimClassBase::VTable0x4()
{
}
// STUB: LEGO1 0x10099e40
void LegoAnimClassBase::VTable0x8()
{
}
// STUB: LEGO1 0x10099f70
void LegoAnimClassBase::VTable0xc()
{
}
// FUNCTION: LEGO1 0x100a0b30
LegoAnimClass::LegoAnimClass()
{
@@ -249,13 +221,15 @@ MxResult LegoAnimClass::VTable0x10(LegoMemory* p_stream, MxS32)
}
// STUB: LEGO1 0x100a0e30
void LegoAnimClass::VTable0x8()
LegoResult LegoAnimClass::Write(LegoStorage* p_storage)
{
// TODO
return SUCCESS;
}
// STUB: LEGO1 0x100a1040
void LegoAnimClass::VTable0xc()
LegoTreeNodeData* LegoAnimClass::CreateData()
{
// TODO
return NULL;
}