From d469cabd6b419a836db59dcdaf751dd7fb9687cf Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sat, 13 Apr 2024 10:35:55 -0400 Subject: [PATCH] Implement/match LegoAnimPresenter::FUN_1006abb0 (#795) --- .../lego/legoomni/include/legoanimpresenter.h | 2 +- .../legoomni/src/video/legoanimpresenter.cpp | 52 +++++++++++++++++-- 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legoanimpresenter.h b/LEGO1/lego/legoomni/include/legoanimpresenter.h index bc9292c7..47e05145 100644 --- a/LEGO1/lego/legoomni/include/legoanimpresenter.h +++ b/LEGO1/lego/legoomni/include/legoanimpresenter.h @@ -90,7 +90,7 @@ class LegoAnimPresenter : public MxVideoPresenter { void FUN_1006a3c0(LegoAnimPresenterMap& p_map, LegoTreeNode* p_node, LegoROI* p_roi); void FUN_1006a4f0(LegoAnimPresenterMap& p_map, LegoAnimNodeData* p_data, const LegoChar* p_und, LegoROI* p_roi); LegoBool FUN_1006aba0(); - LegoBool FUN_1006abb0(LegoTreeNode*, undefined4); + MxBool FUN_1006abb0(LegoTreeNode* p_node, LegoROI* p_roi); void FUN_1006ac90(); void FUN_1006c8a0(MxBool p_bool); diff --git a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp index 2d33163b..7fe3f0e5 100644 --- a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp @@ -453,11 +453,55 @@ LegoBool LegoAnimPresenter::FUN_1006aba0() return FUN_1006abb0(m_anim->GetRoot(), 0); } -// STUB: LEGO1 0x1006abb0 -LegoBool LegoAnimPresenter::FUN_1006abb0(LegoTreeNode*, undefined4) +// FUNCTION: LEGO1 0x1006abb0 +MxBool LegoAnimPresenter::FUN_1006abb0(LegoTreeNode* p_node, LegoROI* p_roi) { - // TODO - return FALSE; + MxBool result = FALSE; + LegoROI* roi = p_roi; + LegoChar* und = NULL; + const LegoChar* name = ((LegoAnimNodeData*) p_node->GetData())->GetName(); + MxS32 i, count; + + if (name != NULL && *name != '-') { + und = FUN_100697c0(name, p_roi != NULL ? p_roi->GetName() : NULL); + + if (p_roi == NULL) { + roi = FUN_100699e0(und); + + if (roi == NULL) { + goto done; + } + } + else { + LegoROI* roi2 = p_roi->FUN_100a8ce0(name, p_roi); + + if (roi2 == NULL) { + if (FUN_100699e0(name) != NULL) { + if (FUN_1006abb0(p_node, NULL)) { + result = TRUE; + } + } + + goto done; + } + } + } + + count = p_node->GetNumChildren(); + for (i = 0; i < count; i++) { + if (!FUN_1006abb0(p_node->GetChild(i), roi)) { + goto done; + } + } + + result = TRUE; + +done: + if (und != NULL) { + delete[] und; + } + + return result; } // STUB: LEGO1 0x1006ac90