Implement MxTransitionManager ctor/dtor/rest of StartTransition (#153)

This commit is contained in:
MattKC
2023-10-01 17:18:16 -07:00
committed by GitHub
parent 592ede1c7b
commit 56f3d12096
4 changed files with 116 additions and 39 deletions

View File

@@ -4,16 +4,30 @@
DECOMP_SIZE_ASSERT(MxTransitionManager, 0x900);
// OFFSET: LEGO1 0x1004b8d0 STUB
// OFFSET: LEGO1 0x1004b8d0
MxTransitionManager::MxTransitionManager()
{
// TODO
m_animationTimer = 0;
m_transitionType = NOT_TRANSITIONING;
m_ddSurface = NULL;
m_unk08 = 0;
m_unk1c = 0;
m_unk20.bit0 = FALSE;
m_unk28.bit0 = FALSE;
m_unk24 = 0;
}
// OFFSET: LEGO1 0x1004ba00 STUB
// OFFSET: LEGO1 0x1004ba00
MxTransitionManager::~MxTransitionManager()
{
// TODO
free(m_unk1c);
if (m_unk08 != NULL) {
delete m_unk08->m_unk1c;
delete m_unk08;
}
TickleManager()->UnregisterClient(this);
}
// OFFSET: LEGO1 0x1004bac0 STUB
@@ -40,36 +54,43 @@ MxResult MxTransitionManager::GetDDrawSurfaceFromVideoManager() // vtable+0x14
// OFFSET: LEGO1 0x1004bb70
MxResult MxTransitionManager::StartTransition(TransitionType p_animationType, MxS32 p_speed,
undefined p_unk, MxBool p_playMusicInAnim)
MxBool p_unk, MxBool p_playMusicInAnim)
{
// TODO: Incomplete and far from matching
if (this->m_transitionType == NOT_TRANSITIONING) {
if (!p_playMusicInAnim) {
MxBackgroundAudioManager *backgroundAudioManager = BackgroundAudioManager();
backgroundAudioManager->Stop();
}
this->m_transitionType = p_animationType;
// TODO: This part of the function is mangled and I can't make out what it's doing right now
this->m_transitionType = p_animationType;
MxU32 time = timeGetTime();
this->m_systemTime = time;
m_unk20.bit0 = p_unk;
this->m_animationSpeed = p_speed;
if (m_unk20.bit0 && m_unk08 != NULL) {
m_unk08->vtable54(1);
MxTickleManager *tickleManager = TickleManager();
tickleManager->RegisterClient(this, p_speed);
MxTransitionManagerUnknownSubclass2 *iVar2 = m_unk08->m_unk1c;
iVar2->m_unk3c = 10000;
iVar2->m_unk30 |= 0x200;
}
LegoInputManager *inputManager = InputManager();
inputManager->m_unk88 = TRUE;
inputManager->m_unk336 = FALSE;
MxU32 time = timeGetTime();
this->m_systemTime = time;
LegoVideoManager *videoManager = VideoManager();
videoManager->SetUnkE4(FALSE);
this->m_animationSpeed = p_speed;
SetAppCursor(1);
return SUCCESS;
MxTickleManager *tickleManager = TickleManager();
tickleManager->RegisterClient(this, p_speed);
LegoInputManager *inputManager = InputManager();
inputManager->m_unk88 = TRUE;
inputManager->m_unk336 = FALSE;
LegoVideoManager *videoManager = VideoManager();
videoManager->SetUnkE4(FALSE);
SetAppCursor(1);
return SUCCESS;
}
return FAILURE;
}
}