diff --git a/LEGO1/mxmediamanager.h b/LEGO1/mxmediamanager.h index ccc3ec42..32e1543c 100644 --- a/LEGO1/mxmediamanager.h +++ b/LEGO1/mxmediamanager.h @@ -7,6 +7,8 @@ #include "mxpresenterlist.h" #include "mxtypes.h" +#include + // VTABLE 0x100dc6b0 // SIZE 0x2c class MxMediaManager : public MxCore diff --git a/LEGO1/mxsoundmanager.cpp b/LEGO1/mxsoundmanager.cpp index 275d0514..8737c771 100644 --- a/LEGO1/mxsoundmanager.cpp +++ b/LEGO1/mxsoundmanager.cpp @@ -1,21 +1,48 @@ #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..e4ee7221 100644 --- a/LEGO1/mxsoundmanager.h +++ b/LEGO1/mxsoundmanager.h @@ -1,6 +1,7 @@ #ifndef MXSOUNDMANAGER_H #define MXSOUNDMANAGER_H +#include "decomp.h" #include "mxaudiomanager.h" // VTABLE 0x100dc128 @@ -14,8 +15,10 @@ class MxSoundManager : public MxAudioManager 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 @@ class MxThread protected: MxThread(); + +public: virtual ~MxThread(); private: