implement/match InfoCenter::~InfoCenter() (#457)

This commit is contained in:
Ramen2X 2024-01-18 21:00:55 -05:00 committed by GitHub
parent 61dd687f53
commit 578e48ce52
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 28 additions and 6 deletions

View file

@ -3,6 +3,7 @@
#include "decomp.h"
#include "legostate.h"
#include "mxstillpresenter.h";
// VTABLE: LEGO1 0x100d93a8
// SIZE 0x94
@ -27,7 +28,8 @@ class InfocenterState : public LegoState {
// FUNCTION: LEGO1 0x10071830
virtual MxBool VTable0x14() override { return FALSE; } // vtable+0x14
inline MxU32 GetInfocenterBufferElement(MxS32 p_index) { return m_buffer[p_index]; }
inline MxS16 GetInfocenterBufferSize() { return sizeof(m_buffer) / sizeof(m_buffer[0]); }
inline MxStillPresenter* GetInfocenterBufferElement(MxS32 p_index) { return m_buffer[p_index]; }
inline MxU32 GetUnknown0x74() { return m_unk0x74; }
inline void SetUnknown0x74(MxU32 p_unk0x74) { m_unk0x74 = p_unk0x74; }
@ -65,8 +67,8 @@ class InfocenterState : public LegoState {
*/
undefined m_pad[0x6c];
MxU32 m_unk0x74; // 0x74
MxU32 m_buffer[7]; // 0x78
MxU32 m_unk0x74; // 0x74
MxStillPresenter* m_buffer[7]; // 0x78
};
#endif // INFOCENTERSTATE_H

View file

@ -112,7 +112,7 @@ MxResult LegoGameState::Save(MxULong p_slot)
MxResult result;
InfocenterState* infocenterState = (InfocenterState*) GameState()->GetState("InfocenterState");
if (!infocenterState || infocenterState->GetInfocenterBufferElement(0) == 0)
if (!infocenterState || infocenterState->GetInfocenterBufferElement(0) == NULL)
result = SUCCESS;
else {
result = FAILURE;

View file

@ -11,6 +11,7 @@
#include "mxbackgroundaudiomanager.h"
#include "mxnotificationmanager.h"
#include "mxstillpresenter.h"
#include "mxticklemanager.h"
#include "mxtransitionmanager.h"
DECOMP_SIZE_ASSERT(Infocenter, 0x1d8)
@ -46,10 +47,29 @@ Infocenter::Infocenter()
m_unk0x1d6 = 0;
}
// STUB: LEGO1 0x1006ec90
// FUNCTION: LEGO1 0x1006ec90
Infocenter::~Infocenter()
{
// TODO
BackgroundAudioManager()->Stop();
MxS16 i = 0;
do {
if (m_infocenterState->GetInfocenterBufferElement(i) != NULL) {
m_infocenterState->GetInfocenterBufferElement(i)->Enable(FALSE);
}
i++;
} while (i < m_infocenterState->GetInfocenterBufferSize());
ControlManager()->Unregister(this);
InputManager()->UnRegister(this);
if (InputManager()->GetWorld() == this) {
InputManager()->ClearWorld();
}
NotificationManager()->Unregister(this);
TickleManager()->UnregisterClient(this);
}
// STUB: LEGO1 0x1006ed90