LegoActionControlPresenter functions (#295)

* LegoActionControlPresenter

* fix formatting

* fix format

* Fixes

* Fix order

---------

Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
Misha 2023-11-21 05:35:03 -05:00 committed by GitHub
parent 1ae3b07dc2
commit 343b0ff3cb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 96 additions and 0 deletions

View file

@ -4,6 +4,7 @@
// Items related to the Extra string of key-value pairs found in MxOb
enum ExtraActionType {
ExtraActionType_none = 0,
ExtraActionType_opendisk = 1,
ExtraActionType_openram = 2,
ExtraActionType_close = 3,

View file

@ -1 +1,76 @@
#include "legoactioncontrolpresenter.h"
#include "define.h"
#include "extra.h"
#include "legoomni.h"
#include "legoutil.h"
#include "mxmediapresenter.h"
#include "mxomni.h"
#include "mxticklemanager.h"
DECOMP_SIZE_ASSERT(LegoActionControlPresenter, 0x68)
// OFFSET: LEGO1 0x10043ce0 STUB
void LegoActionControlPresenter::ReadyTickle()
{
// TODO
}
// OFFSET: LEGO1 0x10043d40 STUB
void LegoActionControlPresenter::RepeatingTickle()
{
// TODO
}
// OFFSET: LEGO1 0x10043df0
MxResult LegoActionControlPresenter::AddToManager()
{
MxResult result = FAILURE;
if (TickleManager()) {
result = SUCCESS;
TickleManager()->RegisterClient(this, 100);
}
return result;
}
// OFFSET: LEGO1 0x10043e20
void LegoActionControlPresenter::Destroy(MxBool p_fromDestructor)
{
if (TickleManager()) {
TickleManager()->UnregisterClient(this);
}
if (!p_fromDestructor) {
MxMediaPresenter::Destroy(FALSE);
}
}
// OFFSET: LEGO1 0x10043e50
void LegoActionControlPresenter::ParseExtra()
{
MxU32 len = m_action->GetExtraLength();
if (len == 0)
return;
len &= MAXWORD;
char buf[1024];
memcpy(buf, m_action->GetExtraData(), len);
buf[len] = '\0';
char output[1024];
if (KeyValueStringParse(output, g_strACTION, buf)) {
m_unk0x50 = MatchActionString(strtok(output, g_parseExtraTokens));
if (m_unk0x50 != ExtraActionType_exit) {
MakeSourceName(buf, strtok(NULL, g_parseExtraTokens));
m_unk0x54 = buf;
m_unk0x54.ToLowerCase();
if (m_unk0x50 != ExtraActionType_run) {
m_unk0x64 = atoi(strtok(NULL, g_parseExtraTokens));
}
}
}
}

View file

@ -1,12 +1,17 @@
#ifndef LEGOACTIONCONTROLPRESENTER_H
#define LEGOACTIONCONTROLPRESENTER_H
#include "decomp.h"
#include "legoutil.h"
#include "mxmediapresenter.h"
// VTABLE 0x100d5118
// SIZE 0x68
class LegoActionControlPresenter : public MxMediaPresenter {
public:
inline LegoActionControlPresenter() { m_unk0x50 = ExtraActionType_none; }
virtual ~LegoActionControlPresenter() override { Destroy(TRUE); }; // vtable+0x00
// OFFSET: LEGO1 0x1000d0e0
inline virtual const char* ClassName() const override // vtable+0x0c
{
@ -19,6 +24,21 @@ class LegoActionControlPresenter : public MxMediaPresenter {
{
return !strcmp(name, LegoActionControlPresenter::ClassName()) || MxMediaPresenter::IsA(name);
}
// TODO: Find proper compilation unit to put this
// OFFSET: LEGO1 0x1000d1d0 TEMPLATE
// LegoActionControlPresenter::`scalar deleting destructor'
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 void Destroy(MxBool p_fromDestructor); // vtable+0x5c
private:
ExtraActionType m_unk0x50; // 0x50
MxString m_unk0x54; // 0x54
undefined4 m_unk0x64; // 0x64
};
#endif // LEGOACTIONCONTROLPRESENTER_H