MxMediaPresenter, MxMusicManager and MxMusicPresenter

* Refactoring Destroy functions
This commit is contained in:
DimaLeon2000 2023-10-13 22:32:42 +09:00
parent a3baf7dee5
commit 7d008ce069
6 changed files with 47 additions and 48 deletions

View File

@ -25,7 +25,7 @@ void MxMediaPresenter::Init()
}
// OFFSET: LEGO1 0x100b54f0 STUB
void MxMediaPresenter::Destroy(MxBool p_destroy)
void MxMediaPresenter::Destroy(MxBool p_fromDestructor)
{
// TODO
}
@ -57,7 +57,7 @@ void MxMediaPresenter::Enable(MxBool p_enable)
}
// OFFSET: LEGO1 0x1000c5b0
void MxMediaPresenter::InitVirtual()
void MxMediaPresenter::Destroy()
{
Destroy(FALSE);
}

View File

@ -33,7 +33,7 @@ class MxMediaPresenter : public MxPresenter
virtual void StreamingTickle() override;
virtual void RepeatingTickle() override;
virtual void DoneTickle() override;
virtual void InitVirtual() override;
virtual void Destroy() override;
virtual MxLong StartAction(MxStreamController *, MxDSAction *) override;
virtual void EndAction() override;
virtual void Enable(MxBool p_enable) override;
@ -43,10 +43,9 @@ class MxMediaPresenter : public MxPresenter
undefined4 m_unk44;
undefined4 m_unk48;
undefined4 m_unk4c;
protected:
void Destroy(MxBool);
private:
void Init();
void Destroy(MxBool p_fromDestructor);
};

View File

@ -15,7 +15,7 @@ MxMusicManager::MxMusicManager()
// OFFSET: LEGO1 0x100c0630
MxMusicManager::~MxMusicManager()
{
LockedReinitialize(TRUE);
Destroy(TRUE);
}
// OFFSET: LEGO1 0x100c0b20
@ -23,47 +23,47 @@ void MxMusicManager::DeinitializeMIDI()
{
m_criticalSection.Enter();
if (this->m_MIDIInitialized)
if (m_MIDIInitialized)
{
this->m_MIDIInitialized = FALSE;
midiStreamStop(this->m_MIDIStreamH);
midiOutUnprepareHeader(this->m_MIDIStreamH, this->m_MIDIHdrP, sizeof(MIDIHDR));
midiOutSetVolume(this->m_MIDIStreamH, this->m_MIDIVolume);
midiStreamClose(this->m_MIDIStreamH);
delete this->m_MIDIHdrP;
this->InitData();
m_MIDIInitialized = FALSE;
midiStreamStop(m_MIDIStreamH);
midiOutUnprepareHeader(m_MIDIStreamH, m_MIDIHdrP, sizeof(MIDIHDR));
midiOutSetVolume(m_MIDIStreamH, m_MIDIVolume);
midiStreamClose(m_MIDIStreamH);
delete m_MIDIHdrP;
InitData();
}
this->m_criticalSection.Leave();
m_criticalSection.Leave();
}
// OFFSET: LEGO1 0x100c0690
void MxMusicManager::Init()
{
this->m_multiplier = 100;
m_multiplier = 100;
InitData();
}
// OFFSET: LEGO1 0x100c06a0
void MxMusicManager::InitData()
{
this->m_MIDIStreamH = 0;
this->m_MIDIInitialized = FALSE;
this->m_unk38 = 0;
this->m_unk3c = 0;
this->m_unk40 = 0;
this->m_unk44 = 0;
this->m_unk48 = 0;
this->m_MIDIHdrP = NULL;
m_MIDIStreamH = 0;
m_MIDIInitialized = FALSE;
m_unk38 = 0;
m_unk3c = 0;
m_unk40 = 0;
m_unk44 = 0;
m_unk48 = 0;
m_MIDIHdrP = NULL;
}
// OFFSET: LEGO1 0x100c06c0
void MxMusicManager::LockedReinitialize(MxBool p_skipDestroy)
void MxMusicManager::Destroy(MxBool p_fromDestructor)
{
if (this->m_thread)
if (m_thread)
{
this->m_thread->Terminate();
if (this->m_thread)
m_thread->Terminate();
if (m_thread)
{
delete m_thread;
}
@ -73,12 +73,12 @@ void MxMusicManager::LockedReinitialize(MxBool p_skipDestroy)
TickleManager()->UnregisterClient(this);
}
this->m_criticalSection.Enter();
m_criticalSection.Enter();
DeinitializeMIDI();
Init();
this->m_criticalSection.Leave();
m_criticalSection.Leave();
if (!p_skipDestroy)
if (!p_fromDestructor)
{
MxAudioManager::Destroy();
}
@ -87,7 +87,7 @@ void MxMusicManager::LockedReinitialize(MxBool p_skipDestroy)
// OFFSET: LEGO1 0x100c0930
void MxMusicManager::Destroy()
{
LockedReinitialize(FALSE);
Destroy(FALSE);
}
// OFFSET: LEGO1 0x100c09a0
@ -100,8 +100,8 @@ MxS32 MxMusicManager::CalculateVolume(MxS32 p_volume)
// OFFSET: LEGO1 0x100c07f0
void MxMusicManager::SetMIDIVolume()
{
MxS32 result = (this->m_volume * this->m_multiplier) / 0x64;
HMIDISTRM streamHandle = this->m_MIDIStreamH;
MxS32 result = (m_volume * m_multiplier) / 0x64;
HMIDISTRM streamHandle = m_MIDIStreamH;
if (streamHandle)
{
@ -114,9 +114,9 @@ void MxMusicManager::SetMIDIVolume()
void MxMusicManager::SetVolume(MxS32 p_volume)
{
MxAudioManager::SetVolume(p_volume);
this->m_criticalSection.Enter();
m_criticalSection.Enter();
SetMIDIVolume();
this->m_criticalSection.Leave();
m_criticalSection.Leave();
}
// OFFSET: LEGO1 0x100c0840
@ -130,13 +130,13 @@ MxResult MxMusicManager::StartMIDIThread(MxU32 p_frequencyMS, MxBool p_noRegiste
{
if (p_noRegister)
{
this->m_criticalSection.Enter();
m_criticalSection.Enter();
locked = TRUE;
this->m_thread = new MxTickleThread(this, p_frequencyMS);
m_thread = new MxTickleThread(this, p_frequencyMS);
if (this->m_thread)
if (m_thread)
{
if (this->m_thread->Start(0, 0) == SUCCESS)
if (m_thread->Start(0, 0) == SUCCESS)
{
status = SUCCESS;
}
@ -156,7 +156,7 @@ MxResult MxMusicManager::StartMIDIThread(MxU32 p_frequencyMS, MxBool p_noRegiste
if (locked)
{
this->m_criticalSection.Leave();
m_criticalSection.Leave();
}
return status;

View File

@ -17,7 +17,7 @@ class MxMusicManager : public MxAudioManager
virtual MxResult StartMIDIThread(MxU32 p_frequencyMS, MxU8 p_noRegister); // vtable+30
private:
void LockedReinitialize(MxBool p_skipDestroy);
void Destroy(MxBool p_fromDestructor);
void DeinitializeMIDI();
MxS32 CalculateVolume(MxS32 p_volume);

View File

@ -24,7 +24,7 @@ void MxMusicPresenter::Init()
}
// OFFSET: LEGO1 0x100c2550
void MxMusicPresenter::Destroy(MxBool p_reinit)
void MxMusicPresenter::Destroy(MxBool p_fromDestructor)
{
if (MusicManager()) {
MusicManager()->RemovePresenter(*this);
@ -32,8 +32,8 @@ void MxMusicPresenter::Destroy(MxBool p_reinit)
m_criticalSection.Enter();
Init();
m_criticalSection.Leave();
if (!p_reinit) {
MxMediaPresenter::Destroy(FALSE);
if (!p_fromDestructor) {
MxMediaPresenter::Destroy();
}
}
@ -49,7 +49,7 @@ MxResult MxMusicPresenter::AddToMusicManager()
}
// OFFSET: LEGO1 0x100c25d0
void MxMusicPresenter::InitVirtual()
void MxMusicPresenter::Destroy()
{
Destroy(FALSE);
}

View File

@ -25,11 +25,11 @@ class MxMusicPresenter : public MxAudioPresenter
virtual ~MxMusicPresenter() override;
virtual MxResult AddToMusicManager(); // vtable+0x34
virtual void InitVirtual(); // vtable+0x38
virtual void Destroy(); // vtable+0x38
private:
void Init();
void Destroy(MxBool p_reinit);
void Destroy(MxBool p_fromDestructor);
};
#endif // MXMUSICPRESENTER_H