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