From 2d45914ddf43843febc110c37c40f03143f7c569 Mon Sep 17 00:00:00 2001 From: Joshua Peisach <itzswirlz2020@outlook.com> Date: Thu, 5 Oct 2023 03:47:37 -0400 Subject: [PATCH] MxSoundManager: dtor, destroy, update types (#164) * MxSoundManager: dtor, destroy, update types Also make MxThread's destructor public * Minor adjustments --------- Co-authored-by: Christian Semmler <mail@csemmler.com> --- LEGO1/mxsoundmanager.cpp | 34 +++++++++++++++++++++++++++++++--- LEGO1/mxsoundmanager.h | 11 ++++++++--- LEGO1/mxthread.h | 2 ++ 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/LEGO1/mxsoundmanager.cpp b/LEGO1/mxsoundmanager.cpp index 275d0514..16d504ce 100644 --- a/LEGO1/mxsoundmanager.cpp +++ b/LEGO1/mxsoundmanager.cpp @@ -1,21 +1,49 @@ #include "mxsoundmanager.h" +#include "mxomni.h" + +DECOMP_SIZE_ASSERT(MxSoundManager, 0x3c); + // OFFSET: LEGO1 0x100ae740 MxSoundManager::MxSoundManager() { Init(); } -// OFFSET: LEGO1 0x100ae7d0 STUB +// OFFSET: LEGO1 0x100ae7d0 MxSoundManager::~MxSoundManager() { - // TODO + Destroy(TRUE); } // OFFSET: LEGO1 0x100ae830 void MxSoundManager::Init() { m_unk30 = 0; - m_unk34 = 0; + m_dsBuffer = NULL; } +// OFFSET: LEGO1 0x100ae840 +void MxSoundManager::Destroy(MxBool p_param) +{ + if (this->m_thread) { + this->m_thread->Terminate(); + delete this->m_thread; + } + else { + TickleManager()->UnregisterClient(this); + } + + this->m_criticalSection.Enter(); + + if (this->m_dsBuffer) { + this->m_dsBuffer->Release(); + } + + Init(); + this->m_criticalSection.Leave(); + + if (!p_param) { + MxAudioManager::Destroy(); + } +} \ No newline at end of file diff --git a/LEGO1/mxsoundmanager.h b/LEGO1/mxsoundmanager.h index 06dc9d5f..d41c6fdb 100644 --- a/LEGO1/mxsoundmanager.h +++ b/LEGO1/mxsoundmanager.h @@ -1,11 +1,13 @@ #ifndef MXSOUNDMANAGER_H #define MXSOUNDMANAGER_H +#include "decomp.h" #include "mxaudiomanager.h" +#include <dsound.h> + // VTABLE 0x100dc128 // SIZE 0x3c -// Base vtables are: MxCore -> 0x100dc6b0 -> MxAudioManager -> MxSoundManager class MxSoundManager : public MxAudioManager { public: @@ -14,8 +16,11 @@ public: private: void Init(); - int m_unk30; - int m_unk34; + void Destroy(MxBool); + + undefined4 m_unk30; + LPDIRECTSOUNDBUFFER m_dsBuffer; // 0x34 + undefined m_unk35[4]; }; #endif // MXSOUNDMANAGER_H diff --git a/LEGO1/mxthread.h b/LEGO1/mxthread.h index 4537dc14..758205d7 100644 --- a/LEGO1/mxthread.h +++ b/LEGO1/mxthread.h @@ -24,6 +24,8 @@ public: protected: MxThread(); + +public: virtual ~MxThread(); private: