From c3ea62ec4530284fdde07294f754e32c3ebe0e3d Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sat, 27 Jan 2024 14:47:09 -0500 Subject: [PATCH] Implement/match LegoWorld::PresentersPending --- LEGO1/lego/legoomni/include/legoworld.h | 2 +- LEGO1/lego/legoomni/src/entity/legoworld.cpp | 40 ++++++++++++++++++-- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legoworld.h b/LEGO1/lego/legoomni/include/legoworld.h index a57bf110..2d922835 100644 --- a/LEGO1/lego/legoomni/include/legoworld.h +++ b/LEGO1/lego/legoomni/include/legoworld.h @@ -59,7 +59,7 @@ class LegoWorld : public LegoEntity { inline LegoCameraController* GetCamera() { return m_cameraController; } inline undefined4 GetUnknown0xec() { return m_unk0xec; } - undefined FUN_100220e0(); + MxBool PresentersPending(); void Remove(MxCore* p_object); void FUN_1001fc80(IslePathActor* p_actor); MxS32 GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value); diff --git a/LEGO1/lego/legoomni/src/entity/legoworld.cpp b/LEGO1/lego/legoomni/src/entity/legoworld.cpp index 002b6f5d..5023840e 100644 --- a/LEGO1/lego/legoomni/src/entity/legoworld.cpp +++ b/LEGO1/lego/legoomni/src/entity/legoworld.cpp @@ -502,7 +502,7 @@ MxResult LegoWorld::Tickle() VTable0x50(); return TRUE; case 2: - if (FUN_100220e0() == 1) + if (PresentersPending()) break; default: m_unk0xf4--; @@ -511,10 +511,42 @@ MxResult LegoWorld::Tickle() return TRUE; } -// STUB: LEGO1 0x100220e0 -undefined LegoWorld::FUN_100220e0() +// FUNCTION: LEGO1 0x100220e0 +MxBool LegoWorld::PresentersPending() { - return 0; + MxPresenterListCursor controlPresenterCursor(&m_controlPresenters); + MxPresenter* presenter; + + while (controlPresenterCursor.Next(presenter)) { + if (presenter->IsEnabled() && !presenter->HasTickleStatePassed(MxPresenter::e_starting)) + return TRUE; + } + + MxPresenterListCursor animPresenterCursor(&m_animPresenters); + + while (animPresenterCursor.Next(presenter)) { + if (presenter->IsEnabled()) { + if (presenter->IsA("LegoLocomotionAnimPresenter")) { + if (!presenter->HasTickleStatePassed(MxPresenter::e_ready)) + return TRUE; + } + else { + if (!presenter->HasTickleStatePassed(MxPresenter::e_starting)) + return TRUE; + } + } + } + + for (MxCoreSet::iterator it = m_set0xa8.begin(); it != m_set0xa8.end(); it++) { + if ((*it)->IsA("MxPresenter")) { + presenter = (MxPresenter*) *it; + + if (presenter->IsEnabled() && !presenter->HasTickleStatePassed(MxPresenter::e_starting)) + return TRUE; + } + } + + return FALSE; } // FUNCTION: LEGO1 0x10022340