mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-23 08:24:16 +00:00
Add tickle states and implement/match MxPresenter::Tickle (#119)
* Implement/match MxPresenter::Tickle * Remove space * Explicit inline for aesthetics
This commit is contained in:

committed by
GitHub

parent
c7458211f3
commit
2b3f7cbfc1
@@ -1,24 +1,18 @@
|
||||
#include "mxpresenter.h"
|
||||
#include "mxautolocker.h"
|
||||
|
||||
#include "decomp.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(MxPresenter, 0x40);
|
||||
|
||||
// OFFSET: LEGO1 0x1000bee0
|
||||
void MxPresenter::DoneTickle()
|
||||
{
|
||||
m_previousTickleFlags |= 1 << m_currentTickleFlag;
|
||||
m_currentTickleFlag = 0;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100b4d50
|
||||
void MxPresenter::Init()
|
||||
{
|
||||
m_currentTickleFlag = 0;
|
||||
m_currentTickleState = TickleState_Idle;
|
||||
m_action = NULL;
|
||||
m_unk0x18 = 0;
|
||||
m_unk0x3c = 0;
|
||||
m_previousTickleFlags = 0;
|
||||
m_previousTickleStates = 0;
|
||||
m_unk0x10 = 0;
|
||||
m_unk0x14 = 0;
|
||||
}
|
||||
@@ -34,10 +28,42 @@ MxPresenter::~MxPresenter()
|
||||
{
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100b5200 STUB
|
||||
// OFFSET: LEGO1 0x100b5200
|
||||
MxLong MxPresenter::Tickle()
|
||||
{
|
||||
// TODO
|
||||
MxAutoLocker lock(&this->m_criticalSection);
|
||||
|
||||
switch (this->m_currentTickleState) {
|
||||
case TickleState_Ready:
|
||||
this->ReadyTickle();
|
||||
|
||||
if (m_currentTickleState != TickleState_Starting)
|
||||
break;
|
||||
case TickleState_Starting:
|
||||
this->StartingTickle();
|
||||
|
||||
if (m_currentTickleState != TickleState_Streaming)
|
||||
break;
|
||||
case TickleState_Streaming:
|
||||
this->StreamingTickle();
|
||||
|
||||
if (m_currentTickleState != TickleState_Repeating)
|
||||
break;
|
||||
case TickleState_Repeating:
|
||||
this->RepeatingTickle();
|
||||
|
||||
if (m_currentTickleState != TickleState_unk5)
|
||||
break;
|
||||
case TickleState_unk5:
|
||||
this->Unk5Tickle();
|
||||
|
||||
if (m_currentTickleState != TickleState_Done)
|
||||
break;
|
||||
case TickleState_Done:
|
||||
this->DoneTickle();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -56,10 +82,23 @@ void MxPresenter::EndAction()
|
||||
// TODO
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100b52d0 STUB
|
||||
void MxPresenter::Enable(unsigned char)
|
||||
// OFFSET: LEGO1 0x100b52d0
|
||||
void MxPresenter::Enable(MxBool p_enable)
|
||||
{
|
||||
// TODO
|
||||
if (this->m_action && this->IsEnabled() != p_enable) {
|
||||
MxU32 flags = this->m_action->GetFlags();
|
||||
|
||||
if (p_enable)
|
||||
this->m_action->SetFlags(flags | MxDSAction::Flag_Enabled);
|
||||
else
|
||||
this->m_action->SetFlags(flags & ~MxDSAction::Flag_Enabled);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100b54c0
|
||||
MxBool MxPresenter::IsEnabled()
|
||||
{
|
||||
return this->m_action && this->m_action->GetFlags() & MxDSAction::Flag_Enabled;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1000be30
|
||||
@@ -68,39 +107,47 @@ void MxPresenter::VTable0x14()
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1000be40
|
||||
void MxPresenter::VTable0x18()
|
||||
void MxPresenter::ReadyTickle()
|
||||
{
|
||||
ParseExtra();
|
||||
m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag;
|
||||
m_currentTickleFlag = 2;
|
||||
|
||||
m_previousTickleStates |= 1 << (unsigned char)m_currentTickleState;
|
||||
m_currentTickleState = TickleState_Starting;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1000be60
|
||||
void MxPresenter::VTable0x1c()
|
||||
void MxPresenter::StartingTickle()
|
||||
{
|
||||
m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag;
|
||||
m_currentTickleFlag = 3;
|
||||
m_previousTickleStates |= 1 << (unsigned char)m_currentTickleState;
|
||||
m_currentTickleState = TickleState_Streaming;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1000be80
|
||||
void MxPresenter::VTable0x20()
|
||||
void MxPresenter::StreamingTickle()
|
||||
{
|
||||
m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag;
|
||||
m_currentTickleFlag = 4;
|
||||
m_previousTickleStates |= 1 << (unsigned char)m_currentTickleState;
|
||||
m_currentTickleState = TickleState_Repeating;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1000bea0
|
||||
void MxPresenter::VTable0x24()
|
||||
void MxPresenter::RepeatingTickle()
|
||||
{
|
||||
m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag;
|
||||
m_currentTickleFlag = 5;
|
||||
m_previousTickleStates |= 1 << (unsigned char)m_currentTickleState;
|
||||
m_currentTickleState = TickleState_unk5;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1000bec0
|
||||
void MxPresenter::VTable0x28()
|
||||
void MxPresenter::Unk5Tickle()
|
||||
{
|
||||
m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag;
|
||||
m_currentTickleFlag = 6;
|
||||
m_previousTickleStates |= 1 << (unsigned char)m_currentTickleState;
|
||||
m_currentTickleState = TickleState_Done;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1000bee0
|
||||
void MxPresenter::DoneTickle()
|
||||
{
|
||||
m_previousTickleStates |= 1 << m_currentTickleState;
|
||||
m_currentTickleState = TickleState_Idle;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1000bf70
|
||||
@@ -114,17 +161,18 @@ void MxPresenter::InitVirtual()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1000bf90
|
||||
void MxPresenter::VTable0x44(undefined4 param)
|
||||
void MxPresenter::SetTickleState(TickleState p_tickleState)
|
||||
{
|
||||
m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag;
|
||||
m_currentTickleFlag = param;
|
||||
m_previousTickleStates |= 1 << (unsigned char)m_currentTickleState;
|
||||
m_currentTickleState = p_tickleState;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1000bfb0
|
||||
unsigned char MxPresenter::VTable0x48(unsigned char param)
|
||||
MxBool MxPresenter::HasTickleStatePassed(TickleState p_tickleState)
|
||||
{
|
||||
return m_previousTickleFlags & (1 << param);
|
||||
return m_previousTickleStates & (1 << (unsigned char)p_tickleState);
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1000bfc0
|
||||
|
Reference in New Issue
Block a user