Match StartAction functions, remove NextFragment (#610)

This commit is contained in:
Christian Semmler 2024-03-01 13:07:07 -05:00 committed by GitHub
parent ba8744ef8f
commit fb6eed9bff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 42 additions and 55 deletions

View file

@ -36,21 +36,24 @@ MxResult MxCompositeMediaPresenter::StartAction(MxStreamController* p_controller
MxDSAction* action;
if (MxPresenter::StartAction(p_controller, p_action) == SUCCESS) {
// The usual cursor.Next() loop doesn't match here, even though
// the logic is the same. It does match when "deconstructed" into
// the following Head(), Current() and NextFragment() calls,
// but this seems unlikely to be the original code.
// The alpha debug build also uses Next().
// cursor.Head();
// while (cursor.Current(action)) {
// cursor.NextFragment();
while (cursor.Next(action)) {
cursor.Head();
while (cursor.Current(action)) {
MxBool success = FALSE;
const char* presenterName;
MxPresenter* presenter = NULL;
action->CopyFlags(m_action->GetFlags());
cursor.Next();
const char* presenterName = PresenterNameDispatch(*action);
MxPresenter* presenter = (MxPresenter*) ObjectFactory()->Create(presenterName);
if (m_action->GetFlags() & MxDSAction::c_looping) {
action->SetFlags(action->GetFlags() | MxDSAction::c_looping);
}
else if (m_action->GetFlags() & MxDSAction::c_bit3) {
action->SetFlags(action->GetFlags() | MxDSAction::c_bit3);
}
presenterName = PresenterNameDispatch(*action);
presenter = (MxPresenter*) ObjectFactory()->Create(presenterName);
if (presenter && presenter->AddToManager() == SUCCESS) {
presenter->SetCompositePresenter(this);

View file

@ -107,13 +107,9 @@ void LegoControlManager::FUN_100292e0()
LegoNotifyListCursor cursor(&m_notifyList);
MxCore* target;
// The usual cursor.Next() loop doesn't match here, even though
// the logic is the same. It does match when "deconstructed" into
// the following Head(), Current() and NextFragment() calls,
// but this seems unlikely to be the original code.
cursor.Head();
while (cursor.Current(target)) {
cursor.NextFragment();
cursor.Next();
target->Notify(m_event);
}
}

View file

@ -74,21 +74,24 @@ MxResult LegoWorldPresenter::StartAction(MxStreamController* p_controller, MxDSA
MxDSAction* action;
if (MxPresenter::StartAction(p_controller, p_action) == SUCCESS) {
// The usual cursor.Next() loop doesn't match here, even though
// the logic is the same. It does match when "deconstructed" into
// the following Head(), Current() and NextFragment() calls,
// but this seems unlikely to be the original code.
// The alpha debug build also uses Next().
cursor.Head();
while (cursor.Current(action)) {
cursor.NextFragment();
MxBool success = FALSE;
const char* presenterName;
MxPresenter* presenter = NULL;
action->CopyFlags(m_action->GetFlags());
cursor.Next();
const char* presenterName = PresenterNameDispatch(*action);
MxPresenter* presenter = (MxPresenter*) factory->Create(presenterName);
if (m_action->GetFlags() & MxDSAction::c_looping) {
action->SetFlags(action->GetFlags() | MxDSAction::c_looping);
}
else if (m_action->GetFlags() & MxDSAction::c_bit3) {
action->SetFlags(action->GetFlags() | MxDSAction::c_bit3);
}
presenterName = PresenterNameDispatch(*action);
presenter = (MxPresenter*) factory->Create(presenterName);
if (presenter && presenter->AddToManager() == SUCCESS) {
presenter->SetCompositePresenter(this);

View file

@ -81,16 +81,6 @@ class MxDSAction : public MxDSObject {
inline MxBool IsLooping() const { return m_flags & c_looping; }
inline MxBool IsBit3() const { return m_flags & c_bit3; }
inline void CopyFlags(MxU32 p_flags)
{
if (p_flags & MxDSAction::c_looping) {
SetFlags(GetFlags() | MxDSAction::c_looping);
}
else if (p_flags & MxDSAction::c_bit3) {
SetFlags(GetFlags() | MxDSAction::c_bit3);
}
}
// SYNTHETIC: LEGO1 0x100ada60
// MxDSAction::`scalar deleting destructor'

View file

@ -118,14 +118,6 @@ class MxListCursor : public MxCore {
void Reset() { m_match = NULL; }
void Prepend(T p_newobj);
// TODO: Probably shouldn't exist
void NextFragment()
{
if (m_match) {
m_match = m_match->GetNext();
}
}
private:
MxList<T>* m_list; // 0x08
MxListEntry<T>* m_match; // 0x0c

View file

@ -32,21 +32,24 @@ MxResult MxCompositePresenter::StartAction(MxStreamController* p_controller, MxD
MxDSAction* action;
if (MxPresenter::StartAction(p_controller, p_action) == SUCCESS) {
// The usual cursor.Next() loop doesn't match here, even though
// the logic is the same. It does match when "deconstructed" into
// the following Head(), Current() and NextFragment() calls,
// but this seems unlikely to be the original code.
// The alpha debug build also uses Next().
cursor.Head();
while (cursor.Current(action)) {
cursor.NextFragment();
MxBool success = FALSE;
const char* presenterName;
MxPresenter* presenter = NULL;
action->CopyFlags(m_action->GetFlags());
cursor.Next();
const char* presenterName = PresenterNameDispatch(*action);
MxPresenter* presenter = (MxPresenter*) factory->Create(presenterName);
if (m_action->GetFlags() & MxDSAction::c_looping) {
action->SetFlags(action->GetFlags() | MxDSAction::c_looping);
}
else if (m_action->GetFlags() & MxDSAction::c_bit3) {
action->SetFlags(action->GetFlags() | MxDSAction::c_bit3);
}
presenterName = PresenterNameDispatch(*action);
presenter = (MxPresenter*) factory->Create(presenterName);
if (presenter && presenter->AddToManager() == SUCCESS) {
presenter->SetCompositePresenter(this);