From 68ac78ae031728ccc43a6e2b3ea8c1087b9e8e58 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Thu, 14 Sep 2023 11:49:44 -0400 Subject: [PATCH] Implement/match MxMediaManager::StopPresenters --- LEGO1/mxlist.h | 12 ++++++++++++ LEGO1/mxmediamanager.cpp | 10 +++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/LEGO1/mxlist.h b/LEGO1/mxlist.h index aac365d1..9e9eae53 100644 --- a/LEGO1/mxlist.h +++ b/LEGO1/mxlist.h @@ -101,6 +101,18 @@ class MxListCursor : public MxCore m_list->m_count--; m_match = NULL; } + + MxBool Next(T*& p_obj) { + if (!m_match) + m_match = m_list->m_first; + else + m_match = m_match->m_next; + + if (m_match) + p_obj = m_match->m_obj; + + return m_match != NULL; + } private: MxList *m_list; MxListEntry *m_match; diff --git a/LEGO1/mxmediamanager.cpp b/LEGO1/mxmediamanager.cpp index c1b59dab..d1823c03 100644 --- a/LEGO1/mxmediamanager.cpp +++ b/LEGO1/mxmediamanager.cpp @@ -1,5 +1,6 @@ #include "mxmediamanager.h" #include "mxautolocker.h" +#include "mxpresenter.h" #include "decomp.h" DECOMP_SIZE_ASSERT(MxMediaManager, 0x2c); @@ -76,10 +77,13 @@ void MxMediaManager::RemovePresenter(MxPresenter &p_presenter) cursor.Detach(); } -// OFFSET: LEGO1 0x100b8ac0 STUB +// OFFSET: LEGO1 0x100b8ac0 void MxMediaManager::StopPresenters() { MxAutoLocker lock(&this->m_criticalSection); - - // Call EndAction on all presenters in list + MxPresenter *presenter; + MxPresenterListCursor cursor(this->m_presenters); + + while (cursor.Next(presenter)) + presenter->EndAction(); }