From af0e38176cc65fcb8af69f1e05ee6357b5e7bfc9 Mon Sep 17 00:00:00 2001 From: Joshua Peisach Date: Sat, 21 Oct 2023 18:41:05 -0400 Subject: [PATCH] MxSoundPresenter (#227) * MxSoundPresenter Destructor, destroy, function adding itself to the sound manager and vtable38. * Fix virtual function declarations --------- Co-authored-by: Christian Semmler --- LEGO1/mxmediapresenter.h | 3 +-- LEGO1/mxsoundpresenter.cpp | 44 ++++++++++++++++++++++++++++++++++++++ LEGO1/mxsoundpresenter.h | 8 +++++++ 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/LEGO1/mxmediapresenter.h b/LEGO1/mxmediapresenter.h index d0a5efe4..7ef31a98 100644 --- a/LEGO1/mxmediapresenter.h +++ b/LEGO1/mxmediapresenter.h @@ -43,9 +43,8 @@ public: undefined4 m_unk44; undefined4 m_unk48; undefined4 m_unk4c; -private: - void Init(); protected: + void Init(); void Destroy(MxBool p_fromDestructor); }; diff --git a/LEGO1/mxsoundpresenter.cpp b/LEGO1/mxsoundpresenter.cpp index 50e04ce4..8204c01c 100644 --- a/LEGO1/mxsoundpresenter.cpp +++ b/LEGO1/mxsoundpresenter.cpp @@ -1 +1,45 @@ #include "mxsoundpresenter.h" + +#include "decomp.h" +#include "mxsoundmanager.h" + +DECOMP_SIZE_ASSERT(MxSoundPresenter, 0x54) + +// OFFSET: LEGO1 0x1000d430 +MxSoundPresenter::~MxSoundPresenter() +{ + Destroy(TRUE); +} + +// OFFSET: LEGO1 0x100b1a50 +void MxSoundPresenter::Destroy(MxBool p_fromDestructor) +{ + if (MSoundManager()) + MSoundManager()->RemovePresenter(*this); + + this->m_criticalSection.Enter(); + MxMediaPresenter::Init(); + this->m_criticalSection.Leave(); + + if (!p_fromDestructor) + MxMediaPresenter::Destroy(FALSE); +} + +// OFFSET: LEGO1 0x100b1aa0 +MxResult MxSoundPresenter::AddToManager() +{ + MxResult ret = FAILURE; + + if (MSoundManager()) { + ret = SUCCESS; + MSoundManager()->AddPresenter(*this); + } + + return ret; +} + +// OFFSET: LEGO1 0x1000d490 +void MxSoundPresenter::Destroy() +{ + Destroy(FALSE); +} diff --git a/LEGO1/mxsoundpresenter.h b/LEGO1/mxsoundpresenter.h index 53d7000d..a63083af 100644 --- a/LEGO1/mxsoundpresenter.h +++ b/LEGO1/mxsoundpresenter.h @@ -2,11 +2,14 @@ #define MXSOUNDPRESENTER_H #include "mxaudiopresenter.h" +#include "mxomni.h" // VTABLE 0x100d4b08 class MxSoundPresenter : public MxAudioPresenter { public: + virtual ~MxSoundPresenter() override; + // OFFSET: LEGO1 0x1000d4a0 inline virtual const char *ClassName() const // vtable+0x0c { @@ -20,6 +23,11 @@ public: return !strcmp(name, MxSoundPresenter::ClassName()) || MxAudioPresenter::IsA(name); }; + virtual MxResult AddToManager() override; // vtable+0x34 + virtual void Destroy() override; // vtable+0x38 + +private: + void Destroy(MxBool); }; #endif // MXSOUNDPRESENTER_H