Further clean up Omni/LegoOmni separation (#423)

* Fix inline functions

* Whitespace

* Try this

* Fix MxEntity

* Further fixes

* Move main out

* Replace tickle code
This commit is contained in:
Christian Semmler
2024-01-11 10:02:55 -05:00
committed by GitHub
parent 75f7791d6f
commit 516e16faf6
48 changed files with 285 additions and 485 deletions

View File

@@ -148,7 +148,6 @@ __declspec(dllexport) LegoOmni* Lego();
__declspec(dllexport) LegoEntity* PickEntity(MxLong, MxLong);
__declspec(dllexport) LegoROI* PickROI(MxLong, MxLong);
__declspec(dllexport) LegoSoundManager* SoundManager();
__declspec(dllexport) MxResult Start(MxDSAction*);
__declspec(dllexport) MxTransitionManager* TransitionManager();
__declspec(dllexport) LegoVideoManager* VideoManager();
@@ -165,6 +164,7 @@ MxDSAction& GetCurrentAction();
void PlayMusic(MxU32 p_index);
void SetIsWorldActive(MxBool p_isWorldActive);
void DeleteObjects(MxAtomId* p_id, MxS32 p_first, MxS32 p_last);
void RegisterScripts();
void UnregisterScripts();

View File

@@ -0,0 +1,54 @@
#ifndef MXCONTROLPRESENTER_H
#define MXCONTROLPRESENTER_H
#include "decomp.h"
#include "mxcompositepresenter.h"
// VTABLE: LEGO1 0x100d7b88
// SIZE 0x5c
class MxControlPresenter : public MxCompositePresenter {
public:
MxControlPresenter();
virtual ~MxControlPresenter() override;
// FUNCTION: LEGO1 0x10044000
inline virtual const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0514
return "MxControlPresenter";
}
// FUNCTION: LEGO1 0x10044010
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, MxControlPresenter::ClassName()) || MxCompositePresenter::IsA(p_name);
}
virtual void ReadyTickle() override; // vtable+0x18
virtual void RepeatingTickle() override; // vtable+0x24
virtual void ParseExtra() override; // vtable+0x30
virtual MxResult AddToManager() override; // vtable+0x34
virtual MxResult StartAction(MxStreamController*, MxDSAction*) override; // vtable+0x3c
virtual void EndAction() override; // vtable+0x40
virtual MxBool HasTickleStatePassed(TickleState p_tickleState) override; // vtable+0x48
virtual void Enable(MxBool p_enable) override; // vtable+0x54
virtual MxBool VTable0x64(undefined4 p_undefined) override; // vtable+0x64
virtual void VTable0x68(MxBool p_undefined); // vtable+0x68
private:
MxBool FUN_10044270(undefined4, undefined4, undefined4*);
MxBool FUN_10044480(undefined4, undefined4*);
void FUN_10044540(undefined2);
undefined2 m_unk0x4c; // 0x4c
MxS16 m_unk0x4e; // 0x4e
MxBool m_unk0x50; // 0x50
undefined2 m_unk0x52; // 0x52
undefined2 m_unk0x54; // 0x54
undefined4* m_unk0x58; // 0x58
};
// SYNTHETIC: LEGO1 0x100440f0
// MxControlPresenter::`scalar deleting destructor'
#endif // MXCONTROLPRESENTER_H

View File

@@ -19,8 +19,7 @@ void LegoActionControlPresenter::ReadyTickle()
if (chunk) {
ParseExtra();
m_previousTickleStates |= 1 << (unsigned char) m_currentTickleState;
m_currentTickleState = TickleState_Starting;
ProgressTickleState(TickleState_Starting);
m_subscriber->DestroyChunk(chunk);
if (m_compositePresenter) {
@@ -47,8 +46,7 @@ void LegoActionControlPresenter::RepeatingTickle()
#else
InvokeAction(m_unk0x50, MxAtomId(m_unk0x54.GetData(), LookupMode_LowerCase2), m_unk0x64, NULL);
#endif
m_previousTickleStates |= 1 << (unsigned char) m_currentTickleState;
m_currentTickleState = TickleState_Done;
ProgressTickleState(TickleState_Done);
}
}

View File

@@ -123,8 +123,7 @@ void MxCompositeMediaPresenter::StartingTickle()
}
if (!m_unk0x4c) {
m_previousTickleStates |= 1 << (unsigned char) m_currentTickleState;
m_currentTickleState = TickleState_Streaming;
ProgressTickleState(TickleState_Streaming);
MxLong time = Timer()->GetTime();
m_action->SetUnknown90(time);
}
@@ -138,8 +137,7 @@ MxResult MxCompositeMediaPresenter::Tickle()
switch (m_currentTickleState) {
case TickleState_Ready:
m_previousTickleStates |= 1 << (unsigned char) m_currentTickleState;
m_currentTickleState = TickleState_Starting;
ProgressTickleState(TickleState_Starting);
case TickleState_Starting:
StartingTickle();
break;

View File

@@ -0,0 +1,111 @@
#include "mxcontrolpresenter.h"
#include "mxticklemanager.h"
DECOMP_SIZE_ASSERT(MxControlPresenter, 0x5c)
// FUNCTION: LEGO1 0x10043f50
MxControlPresenter::MxControlPresenter()
{
this->m_unk0x4c = 0;
this->m_unk0x4e = -1;
this->m_unk0x50 = FALSE;
this->m_unk0x52 = 0;
this->m_unk0x58 = 0;
this->m_unk0x54 = 0;
}
// FUNCTION: LEGO1 0x10043fd0
void MxControlPresenter::RepeatingTickle()
{
// empty
}
// FUNCTION: LEGO1 0x10043fe0
MxBool MxControlPresenter::VTable0x64(undefined4 p_undefined)
{
return m_unk0x50;
}
// FUNCTION: LEGO1 0x10043ff0
void MxControlPresenter::VTable0x68(MxBool p_undefined)
{
m_unk0x50 = p_undefined;
}
// FUNCTION: LEGO1 0x10044110
MxControlPresenter::~MxControlPresenter()
{
if (m_unk0x58)
delete m_unk0x58;
}
// FUNCTION: LEGO1 0x10044180
MxResult MxControlPresenter::AddToManager()
{
m_unk0x4e = 0;
return SUCCESS;
}
// STUB: LEGO1 0x10044190
MxResult MxControlPresenter::StartAction(MxStreamController*, MxDSAction*)
{
// TODO
return SUCCESS;
}
// FUNCTION: LEGO1 0x10044260
void MxControlPresenter::EndAction()
{
if (m_action) {
m_unk0x50 = TRUE;
MxCompositePresenter::EndAction();
}
}
// STUB: LEGO1 0x10044270
MxBool MxControlPresenter::FUN_10044270(undefined4, undefined4, undefined4*)
{
// TODO
return TRUE;
}
// STUB: LEGO1 0x10044480
MxBool MxControlPresenter::FUN_10044480(undefined4, undefined4*)
{
// TODO
return TRUE;
}
// STUB: LEGO1 0x10044540
void MxControlPresenter::FUN_10044540(undefined2)
{
// TODO
}
// FUNCTION: LEGO1 0x10044610
void MxControlPresenter::ReadyTickle()
{
MxPresenter::ParseExtra();
TickleManager()->UnregisterClient(this);
ProgressTickleState(TickleState_Repeating);
}
// STUB: LEGO1 0x10044640
void MxControlPresenter::ParseExtra()
{
// TODO
}
// STUB: LEGO1 0x10044820
void MxControlPresenter::Enable(MxBool p_enable)
{
// TODO
}
// STUB: LEGO1 0x100448a0
MxBool MxControlPresenter::HasTickleStatePassed(TickleState p_tickleState)
{
// TODO
return TRUE;
}

View File

@@ -69,8 +69,7 @@ void LegoEntityPresenter::ReadyTickle()
m_objectBackend->SetLocation(m_action->GetLocation(), m_action->GetDirection(), m_action->GetUp(), TRUE);
ParseExtra();
}
m_previousTickleStates |= 1 << (unsigned char) m_currentTickleState;
m_currentTickleState = TickleState_Starting;
ProgressTickleState(TickleState_Starting);
}
}

View File

@@ -95,8 +95,7 @@ void LegoWorldPresenter::ReadyTickle()
}
ParseExtra();
m_previousTickleStates |= 1 << (unsigned char) m_currentTickleState;
m_currentTickleState = TickleState_Starting;
ProgressTickleState(TickleState_Starting);
}
// FUNCTION: LEGO1 0x10066ac0
@@ -116,8 +115,7 @@ void LegoWorldPresenter::StartingTickle()
}
}
m_previousTickleStates |= 1 << (unsigned char) m_currentTickleState;
m_currentTickleState = TickleState_Streaming;
ProgressTickleState(TickleState_Streaming);
}
// STUB: LEGO1 0x10067a70

View File

@@ -241,6 +241,20 @@ void SetIsWorldActive(MxBool p_isWorldActive)
g_isWorldActive = p_isWorldActive;
}
// FUNCTION: LEGO1 0x100159e0
void DeleteObjects(MxAtomId* p_id, MxS32 p_first, MxS32 p_last)
{
MxDSAction action;
action.SetAtomId(*p_id);
action.SetUnknown24(-2);
for (MxS32 first = p_first, last = p_last; first <= last; first++) {
action.SetObjectId(first);
DeleteObject(action);
}
}
// STUB: LEGO1 0x1001a700
void FUN_1001a700()
{
@@ -685,9 +699,3 @@ void LegoOmni::StopTimer()
MxOmni::StopTimer();
SetAppCursor(0);
}
// FUNCTION: LEGO1 0x100acf50
MxResult Start(MxDSAction* p_dsAction)
{
return MxOmni::GetInstance()->Start(p_dsAction);
}

View File

@@ -76,8 +76,8 @@ void LegoPalettePresenter::ReadyTickle()
if (chunk) {
if (chunk->GetTime() <= m_action->GetElapsedTime()) {
ParseExtra();
m_previousTickleStates |= 1 << (unsigned char) m_currentTickleState;
m_currentTickleState = TickleState_Starting;
ProgressTickleState(TickleState_Starting);
chunk = m_subscriber->NextChunk();
MxResult result = ParsePalette(chunk);
m_subscriber->DestroyChunk(chunk);