diff --git a/LEGO1/legoentitypresenter.cpp b/LEGO1/legoentitypresenter.cpp index 394a5464..c5057035 100644 --- a/LEGO1/legoentitypresenter.cpp +++ b/LEGO1/legoentitypresenter.cpp @@ -9,26 +9,16 @@ LegoEntityPresenter::LegoEntityPresenter() Init(); } -// OFFSET: LEGO1 0x100535d0 -LegoEntityPresenter::~LegoEntityPresenter() -{ - Destroy(); -} - // OFFSET: LEGO1 0x100535c0 void LegoEntityPresenter::Init() { m_unk4c = 0; } -// OFFSET: LEGO1 0x10053640 -undefined4 LegoEntityPresenter::Destroy() +// OFFSET: LEGO1 0x100535d0 +LegoEntityPresenter::~LegoEntityPresenter() { - if (VideoManager()) { - VideoManager()->RemovePresenter(*this); - } - - return Init(); + Destroy(TRUE); } // OFFSET: LEGO1 0x10053630 @@ -37,3 +27,19 @@ undefined4 LegoEntityPresenter::vtable6c(undefined4 p_unknown) m_unk4c = p_unknown; return 0; } + +// OFFSET: LEGO1 0x10053640 +void LegoEntityPresenter::Destroy(MxBool p_fromDestructor) +{ + if (VideoManager()) { + VideoManager()->RemovePresenter(*this); + } + + Init(); +} + +// OFFSET: LEGO1 0x10053670 +void LegoEntityPresenter::Destroy() +{ + Destroy(FALSE); +} diff --git a/LEGO1/legoentitypresenter.h b/LEGO1/legoentitypresenter.h index 4414d641..3fde133c 100644 --- a/LEGO1/legoentitypresenter.h +++ b/LEGO1/legoentitypresenter.h @@ -22,11 +22,13 @@ class LegoEntityPresenter : public MxCompositePresenter { return !strcmp(name, LegoEntityPresenter::ClassName()) || MxCompositePresenter::IsA(name); } -private: + virtual void Destroy() override; // vtable+0x38 virtual void Init(); // vtable+0x68 virtual undefined4 vtable6c(undefined4 p_unknown); // vtable+0x6c - undefined4 Destroy(); +private: + void Destroy(MxBool p_fromDestructor); + undefined4 m_unk4c; }; diff --git a/LEGO1/mxcompositepresenter.cpp b/LEGO1/mxcompositepresenter.cpp index 219b140c..b6a38fa7 100644 --- a/LEGO1/mxcompositepresenter.cpp +++ b/LEGO1/mxcompositepresenter.cpp @@ -16,3 +16,27 @@ MxCompositePresenter::~MxCompositePresenter() { NotificationManager()->Unregister(this); } + +// OFFSET: LEGO1 0x100b67f0 STUB +void MxCompositePresenter::VTable0x58() +{ + // TODO +} + +// OFFSET: LEGO1 0x100b69b0 STUB +void MxCompositePresenter::VTable0x5c() +{ + // TODO +} + +// OFFSET: LEGO1 0x100b6b40 STUB +void MxCompositePresenter::VTable0x60() +{ + // TODO +} + +// OFFSET: LEGO1 0x1000caf0 STUB +void MxCompositePresenter::VTable0x64() +{ + // TODO +} diff --git a/LEGO1/mxcompositepresenter.h b/LEGO1/mxcompositepresenter.h index f7fbd1cf..c41f4a0c 100644 --- a/LEGO1/mxcompositepresenter.h +++ b/LEGO1/mxcompositepresenter.h @@ -24,6 +24,12 @@ class MxCompositePresenter : public MxPresenter { return !strcmp(name, MxCompositePresenter::ClassName()) || MxPresenter::IsA(name); } + virtual void VTable0x58(); + virtual void VTable0x5c(); + virtual void VTable0x60(); + virtual void VTable0x64(); + +private: MxUnkList m_list; }; diff --git a/LEGO1/mxpresenter.h b/LEGO1/mxpresenter.h index ce61fa7e..9427e79d 100644 --- a/LEGO1/mxpresenter.h +++ b/LEGO1/mxpresenter.h @@ -11,6 +11,7 @@ class MxStreamController; // VTABLE 0x100d4d38 +// SIZE 0x40 class MxPresenter : public MxCore { public: enum TickleState {