Implement/match MxStreamController::FUN_100c20d0 (#369)

* Implement/match MxStreamController::FUN_100c1f00

* Implement/match MxStreamController::FUN_100c20d0
This commit is contained in:
Christian Semmler
2023-12-26 20:54:17 -05:00
committed by GitHub
parent 88d267f9f3
commit 6e947c3789
3 changed files with 33 additions and 3 deletions

View File

@@ -290,9 +290,22 @@ MxNextActionDataStart* MxStreamController::FindNextActionDataStartFromStreamingA
return m_nextActionList.Find(p_action->GetObjectId(), p_action->GetUnknown24()); return m_nextActionList.Find(p_action->GetObjectId(), p_action->GetUnknown24());
} }
// STUB: LEGO1 0x100c20d0 // FUNCTION: LEGO1 0x100c20d0
MxBool MxStreamController::FUN_100c20d0(MxDSObject& p_obj) MxBool MxStreamController::FUN_100c20d0(MxDSObject& p_obj)
{ {
// TODO if (m_subscriberList.Find(&p_obj))
return FALSE;
if (p_obj.IsA("MxDSMultiAction")) {
MxDSActionList* actions = ((MxDSMultiAction&) p_obj).GetActionList();
MxDSActionListCursor cursor(actions);
MxDSAction* action;
while (cursor.Next(action)) {
if (!FUN_100c20d0(*action))
return FALSE;
}
}
return TRUE; return TRUE;
} }

View File

@@ -5,6 +5,20 @@ DECOMP_SIZE_ASSERT(MxStreamListMxDSAction, 0xc);
DECOMP_SIZE_ASSERT(MxStreamListMxNextActionDataStart, 0xc); DECOMP_SIZE_ASSERT(MxStreamListMxNextActionDataStart, 0xc);
DECOMP_SIZE_ASSERT(MxStreamListMxDSSubscriber, 0xc); DECOMP_SIZE_ASSERT(MxStreamListMxDSSubscriber, 0xc);
// FUNCTION: LEGO1 0x100b8450
MxDSSubscriber* MxStreamListMxDSSubscriber::Find(MxDSObject* p_object)
{
for (iterator it = begin(); it != end(); it++) {
if (p_object->GetObjectId() == -1 || p_object->GetObjectId() == (*it)->GetObjectId()) {
if (p_object->GetUnknown24() == -2 || p_object->GetUnknown24() == (*it)->GetUnknown48()) {
return *it;
}
}
}
return NULL;
}
// FUNCTION: LEGO1 0x100bfa80 // FUNCTION: LEGO1 0x100bfa80
MxDSAction* MxStreamListMxDSAction::Find(MxDSAction* p_action, MxBool p_delete) MxDSAction* MxStreamListMxDSAction::Find(MxDSAction* p_action, MxBool p_delete)
{ {

View File

@@ -46,6 +46,9 @@ public:
}; };
// SIZE 0xc // SIZE 0xc
class MxStreamListMxDSSubscriber : public MxStreamList<MxDSSubscriber*> {}; class MxStreamListMxDSSubscriber : public MxStreamList<MxDSSubscriber*> {
public:
MxDSSubscriber* Find(MxDSObject* p_object);
};
#endif // MXSTREAMLIST_H #endif // MXSTREAMLIST_H