mirror of
https://github.com/isledecomp/isle.git
synced 2025-02-16 19:50:15 -05:00
Implement/match MxLoopingFlcPresenter remaining functions (#459)
* Implement/match MxLoopingFlcPresenter remaining functions * Remove include * Change to long
This commit is contained in:
parent
dbfe28db51
commit
35e5a62ff7
2 changed files with 83 additions and 4 deletions
|
@ -18,7 +18,11 @@ public:
|
||||||
return "MxLoopingFlcPresenter";
|
return "MxLoopingFlcPresenter";
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void NextFrame() override; // vtable+0x64
|
virtual void RepeatingTickle() override; // vtable+0x24
|
||||||
|
virtual MxResult AddToManager() override; // vtable+0x34
|
||||||
|
virtual void Destroy() override; // vtable+0x38
|
||||||
|
virtual void NextFrame() override; // vtable+0x64
|
||||||
|
virtual void VTable0x88(); // vtable+0x88
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x100b4390
|
// SYNTHETIC: LEGO1 0x100b4390
|
||||||
// MxLoopingFlcPresenter::`scalar deleting destructor'
|
// MxLoopingFlcPresenter::`scalar deleting destructor'
|
||||||
|
@ -27,7 +31,7 @@ private:
|
||||||
void Init();
|
void Init();
|
||||||
void Destroy(MxBool p_fromDestructor);
|
void Destroy(MxBool p_fromDestructor);
|
||||||
|
|
||||||
undefined4 m_unk0x68;
|
MxLong m_elapsedDuration; // 0x68
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MXLOOPINGFLCPRESENTER_H
|
#endif // MXLOOPINGFLCPRESENTER_H
|
||||||
|
|
|
@ -19,7 +19,7 @@ MxLoopingFlcPresenter::~MxLoopingFlcPresenter()
|
||||||
// FUNCTION: LEGO1 0x100b4410
|
// FUNCTION: LEGO1 0x100b4410
|
||||||
void MxLoopingFlcPresenter::Init()
|
void MxLoopingFlcPresenter::Init()
|
||||||
{
|
{
|
||||||
this->m_unk0x68 = 0;
|
this->m_elapsedDuration = 0;
|
||||||
this->m_flags &= ~c_bit2;
|
this->m_flags &= ~c_bit2;
|
||||||
this->m_flags &= ~c_bit3;
|
this->m_flags &= ~c_bit3;
|
||||||
}
|
}
|
||||||
|
@ -45,8 +45,83 @@ void MxLoopingFlcPresenter::NextFrame()
|
||||||
else {
|
else {
|
||||||
LoadFrame(chunk);
|
LoadFrame(chunk);
|
||||||
LoopChunk(chunk);
|
LoopChunk(chunk);
|
||||||
m_unk0x68 += m_flcHeader->speed;
|
m_elapsedDuration += m_flcHeader->speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_subscriber->DestroyChunk(chunk);
|
m_subscriber->DestroyChunk(chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100b44c0
|
||||||
|
void MxLoopingFlcPresenter::VTable0x88()
|
||||||
|
{
|
||||||
|
if (m_action->GetDuration() < m_elapsedDuration)
|
||||||
|
ProgressTickleState(e_unk5);
|
||||||
|
else {
|
||||||
|
MxStreamChunk* chunk;
|
||||||
|
m_loopingChunkCursor->Current(chunk);
|
||||||
|
LoadFrame(chunk);
|
||||||
|
m_elapsedDuration += m_flcHeader->speed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100b4520
|
||||||
|
void MxLoopingFlcPresenter::RepeatingTickle()
|
||||||
|
{
|
||||||
|
for (MxS16 i = 0; i < m_unk0x5c; i++) {
|
||||||
|
if (!m_loopingChunkCursor->HasMatch()) {
|
||||||
|
MxStreamChunk* chunk;
|
||||||
|
MxStreamChunkListCursor cursor(m_loopingChunks);
|
||||||
|
|
||||||
|
cursor.Last(chunk);
|
||||||
|
MxLong time = chunk->GetTime();
|
||||||
|
|
||||||
|
cursor.First(chunk);
|
||||||
|
|
||||||
|
time -= chunk->GetTime();
|
||||||
|
time += m_flcHeader->speed;
|
||||||
|
|
||||||
|
cursor.Reset();
|
||||||
|
while (cursor.Next(chunk))
|
||||||
|
chunk->SetTime(chunk->GetTime() + time);
|
||||||
|
|
||||||
|
m_loopingChunkCursor->Next();
|
||||||
|
}
|
||||||
|
|
||||||
|
MxStreamChunk* chunk;
|
||||||
|
m_loopingChunkCursor->Current(chunk);
|
||||||
|
|
||||||
|
if (m_action->GetElapsedTime() < chunk->GetTime())
|
||||||
|
break;
|
||||||
|
|
||||||
|
VTable0x88();
|
||||||
|
|
||||||
|
m_loopingChunkCursor->Next(chunk);
|
||||||
|
|
||||||
|
if (m_currentTickleState != e_repeating)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100b4860
|
||||||
|
MxResult MxLoopingFlcPresenter::AddToManager()
|
||||||
|
{
|
||||||
|
MxResult result = FAILURE;
|
||||||
|
MxBool locked = FALSE;
|
||||||
|
|
||||||
|
if (MxFlcPresenter::AddToManager() == SUCCESS) {
|
||||||
|
m_criticalSection.Enter();
|
||||||
|
locked = TRUE;
|
||||||
|
result = SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locked)
|
||||||
|
m_criticalSection.Leave();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100b48a0
|
||||||
|
void MxLoopingFlcPresenter::Destroy()
|
||||||
|
{
|
||||||
|
Destroy(FALSE);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue