MxSoundPresenter

Destructor, destroy, function adding itself to the sound manager and vtable38.
This commit is contained in:
Joshua Peisach 2023-10-21 18:05:39 -04:00
parent 4f201eaa48
commit 40dbdbd10f
No known key found for this signature in database
GPG Key ID: 41C3D4189AFEDB5A
3 changed files with 50 additions and 2 deletions

View File

@ -43,9 +43,8 @@ class MxMediaPresenter : public MxPresenter
undefined4 m_unk44;
undefined4 m_unk48;
undefined4 m_unk4c;
private:
void Init();
protected:
void Init();
void Destroy(MxBool p_fromDestructor);
};

View File

@ -1 +1,43 @@
#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 == FALSE) {
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::vtable38()
{
Destroy(FALSE);
}

View File

@ -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,10 @@ class MxSoundPresenter : public MxAudioPresenter
return !strcmp(name, MxSoundPresenter::ClassName()) || MxAudioPresenter::IsA(name);
};
virtual MxResult AddToManager(); // vtable+0x34
virtual void vtable38(); // vtable+0x38
private:
void Destroy(MxBool);
};
#endif // MXSOUNDPRESENTER_H