From 4f201eaa485c46ac44b09e25261d5599771ebea3 Mon Sep 17 00:00:00 2001 From: Joshua Peisach Date: Fri, 20 Oct 2023 14:41:23 -0400 Subject: [PATCH] MxEventPresenter destructor (#223) * MxEventPresenter destructor * Fix and implement Destroy * Fix scope of Destroy decl --------- Co-authored-by: Christian Semmler --- LEGO1/mxeventpresenter.cpp | 25 ++++++++++++++++++++++--- LEGO1/mxeventpresenter.h | 4 +++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/LEGO1/mxeventpresenter.cpp b/LEGO1/mxeventpresenter.cpp index 88c20ce3..3a4ff7f4 100644 --- a/LEGO1/mxeventpresenter.cpp +++ b/LEGO1/mxeventpresenter.cpp @@ -1,4 +1,6 @@ #include "mxeventpresenter.h" +#include "mxeventmanager.h" +#include "mxomni.h" #include "decomp.h" @@ -10,14 +12,31 @@ MxEventPresenter::MxEventPresenter() Init(); } -// OFFSET: LEGO1 0x100c2d40 STUB +// OFFSET: LEGO1 0x100c2d40 MxEventPresenter::~MxEventPresenter() { - // TODO + Destroy(); } // OFFSET: LEGO1 0x100c2da0 void MxEventPresenter::Init() { - m_unk50 = 0; + m_unk50 = NULL; +} + +// OFFSET: LEGO1 0x100c2de0 +void MxEventPresenter::Destroy() +{ + MxEventManager *eventManager = EventManager(); + if (eventManager) + EventManager()->RemovePresenter(*this); + + m_criticalSection.Enter(); + + if (m_unk50) + delete m_unk50; + + Init(); + + m_criticalSection.Leave(); } diff --git a/LEGO1/mxeventpresenter.h b/LEGO1/mxeventpresenter.h index 256d0c7f..358a54af 100644 --- a/LEGO1/mxeventpresenter.h +++ b/LEGO1/mxeventpresenter.h @@ -26,10 +26,12 @@ public: return !strcmp(name, MxEventPresenter::ClassName()) || MxMediaPresenter::IsA(name); } + virtual void Destroy() override; // vtable+0x38 + private: void Init(); - undefined4 m_unk50; + undefined4 *m_unk50; }; #endif // MXEVENTPRESENTER_H