mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-28 18:51:16 +00:00
Fixes/matches
This commit is contained in:
parent
838534cc29
commit
dce08763b7
@ -7,6 +7,7 @@
|
||||
#include "mxpresenterlist.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d6a98
|
||||
// SIZE 0x2c
|
||||
class LegoControlManagerEvent : public LegoEventNotificationParam {
|
||||
public:
|
||||
inline LegoControlManagerEvent() : LegoEventNotificationParam()
|
||||
@ -16,17 +17,17 @@ class LegoControlManagerEvent : public LegoEventNotificationParam {
|
||||
}
|
||||
|
||||
inline MxS32 GetClickedObjectId() const { return m_clickedObjectId; }
|
||||
inline const MxAtomId* GetClickedAtom() const { return m_clickedAtom; }
|
||||
inline const char* GetClickedAtom() const { return m_clickedAtom; }
|
||||
inline MxS16 GetUnknown0x28() const { return m_unk0x28; }
|
||||
|
||||
inline void SetClickedObjectId(MxS32 p_clickedObjectId) { m_clickedObjectId = p_clickedObjectId; }
|
||||
inline void SetClickedAtom(const MxAtomId* p_clickedAtom) { m_clickedAtom = p_clickedAtom; }
|
||||
inline void SetClickedAtom(const char* p_clickedAtom) { m_clickedAtom = p_clickedAtom; }
|
||||
inline void SetUnknown0x28(MxS16 p_unk0x28) { m_unk0x28 = p_unk0x28; }
|
||||
|
||||
private:
|
||||
MxS32 m_clickedObjectId; // 0x20
|
||||
const MxAtomId* m_clickedAtom; // 0x24
|
||||
MxS16 m_unk0x28; // 0x28
|
||||
MxS32 m_clickedObjectId; // 0x20
|
||||
const char* m_clickedAtom; // 0x24
|
||||
MxS16 m_unk0x28; // 0x28
|
||||
};
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10028bf0
|
||||
|
||||
@ -41,8 +41,8 @@ class LegoEventNotificationParam : public MxNotificationParam {
|
||||
inline void SetROI(LegoROI* p_roi) { m_roi = p_roi; }
|
||||
inline void SetModifier(MxU8 p_modifier) { m_modifier = p_modifier; }
|
||||
inline void SetKey(MxU8 p_key) { m_key = p_key; }
|
||||
inline void SetX(MxU8 p_x) { m_x = p_x; }
|
||||
inline void SetY(MxU8 p_y) { m_y = p_y; }
|
||||
inline void SetX(MxS32 p_x) { m_x = p_x; }
|
||||
inline void SetY(MxS32 p_y) { m_y = p_y; }
|
||||
|
||||
protected:
|
||||
MxU8 m_modifier; // 0x0c
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
class LegoControlManager;
|
||||
|
||||
extern MxS32 g_unk0x100f31b0;
|
||||
extern const MxAtomId* g_unk0x100f31b4;
|
||||
extern const char* g_unk0x100f31b4;
|
||||
|
||||
// VTABLE: LEGO1 0x100d87b8
|
||||
// class MxCollection<LegoEventNotificationParam>
|
||||
@ -174,6 +174,9 @@ class LegoInputManager : public MxPresenter {
|
||||
// SYNTHETIC: LEGO1 0x10028b30
|
||||
// MxPtrList<MxCore>::`scalar deleting destructor'
|
||||
|
||||
// FUNCTION: LEGO1 0x10028ba0
|
||||
// LegoNotifyList::~LegoNotifyList
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10028fd0
|
||||
// LegoNotifyListCursor::`scalar deleting destructor'
|
||||
|
||||
|
||||
@ -36,7 +36,7 @@ class MxControlPresenter : public MxCompositePresenter {
|
||||
virtual void Enable(MxBool p_enable) override; // vtable+0x54
|
||||
virtual MxBool VTable0x64(undefined4 p_undefined) override; // vtable+0x64
|
||||
virtual void VTable0x68(MxBool p_unk0x50); // vtable+0x68
|
||||
virtual void VTable0x6c(undefined4); // vtable+0x6c
|
||||
virtual void VTable0x6c(undefined2); // vtable+0x6c
|
||||
|
||||
MxBool FUN_10044480(LegoControlManagerEvent* p_event, MxPresenter* p_presenter);
|
||||
|
||||
|
||||
@ -5,16 +5,16 @@
|
||||
#include "mxpresenter.h"
|
||||
#include "mxticklemanager.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoControlManager, 0x60);
|
||||
DECOMP_SIZE_ASSERT(LegoControlManagerEvent, 0x2c);
|
||||
DECOMP_SIZE_ASSERT(LegoControlManager, 0x60)
|
||||
DECOMP_SIZE_ASSERT(LegoControlManagerEvent, 0x2c)
|
||||
|
||||
// FUNCTION: LEGO1 0x10028520
|
||||
LegoControlManager::LegoControlManager()
|
||||
{
|
||||
m_presenterList = 0;
|
||||
m_presenterList = NULL;
|
||||
m_unk0x08 = 0;
|
||||
m_unk0x0c = 0;
|
||||
m_unk0x10 = 0;
|
||||
m_unk0x10 = FALSE;
|
||||
m_unk0x14 = NULL;
|
||||
TickleManager()->RegisterClient(this, 10);
|
||||
}
|
||||
@ -30,7 +30,7 @@ void LegoControlManager::FUN_10028df0(MxPresenterList* p_presenterList)
|
||||
{
|
||||
m_presenterList = p_presenterList;
|
||||
g_unk0x100f31b0 = -1;
|
||||
g_unk0x100f31b4 = 0;
|
||||
g_unk0x100f31b4 = NULL;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10028e10
|
||||
@ -51,7 +51,6 @@ void LegoControlManager::Unregister(MxCore* p_listener)
|
||||
MxBool LegoControlManager::FUN_10029210(LegoEventNotificationParam& p_param, MxPresenter* p_presenter)
|
||||
{
|
||||
if (m_presenterList != NULL && m_presenterList->GetCount() != 0) {
|
||||
|
||||
m_unk0x14 = p_presenter;
|
||||
|
||||
if (p_param.GetType() == c_notificationButtonUp || p_param.GetType() == c_notificationButtonDown) {
|
||||
@ -68,7 +67,7 @@ MxBool LegoControlManager::FUN_10029210(LegoEventNotificationParam& p_param, MxP
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (g_unk0x100f31b0 != -1 && g_unk0x100f31b4 != 0) {
|
||||
if (g_unk0x100f31b0 != -1 && g_unk0x100f31b4 != NULL) {
|
||||
if (m_unk0x08 == 2) {
|
||||
return FUN_10029750();
|
||||
}
|
||||
@ -81,28 +80,38 @@ MxBool LegoControlManager::FUN_10029210(LegoEventNotificationParam& p_param, MxP
|
||||
else if (p_param.GetType() == c_notificationButtonDown) {
|
||||
if (m_unk0x0c == 1) {
|
||||
m_unk0x10 = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
return FUN_10029630();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
g_unk0x100f31b0 = -1;
|
||||
g_unk0x100f31b4 = 0;
|
||||
}
|
||||
g_unk0x100f31b4 = NULL;
|
||||
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100292e0
|
||||
void LegoControlManager::FUN_100292e0()
|
||||
{
|
||||
LegoNotifyListCursor cursor(&m_notifyList);
|
||||
MxCore* object;
|
||||
while (cursor.Next(object)) {
|
||||
object->Notify(m_event);
|
||||
MxCore* target;
|
||||
|
||||
// The usual cursor.Next() loop doesn't match here, even though
|
||||
// the logic is the same. It does match when "deconstructed" into
|
||||
// the following Head(), Current() and NextFragment() calls,
|
||||
// but this seems unlikely to be the original code.
|
||||
cursor.Head();
|
||||
while (cursor.Current(target)) {
|
||||
cursor.NextFragment();
|
||||
target->Notify(m_event);
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,12 +144,13 @@ MxBool LegoControlManager::FUN_10029630()
|
||||
{
|
||||
MxPresenterListCursor cursor(m_presenterList);
|
||||
MxPresenter* presenter;
|
||||
|
||||
while (cursor.Next(presenter)) {
|
||||
if (((MxControlPresenter*) presenter)->FUN_10044480(&m_event, m_unk0x14)) {
|
||||
g_unk0x100f31b0 = m_event.GetClickedObjectId();
|
||||
g_unk0x100f31b4 = m_event.GetClickedAtom();
|
||||
FUN_100292e0();
|
||||
m_unk0x08 = TRUE;
|
||||
m_unk0x08 = 1;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@ -153,9 +163,10 @@ MxBool LegoControlManager::FUN_10029750()
|
||||
{
|
||||
MxPresenterListCursor cursor(m_presenterList);
|
||||
MxPresenter* presenter;
|
||||
|
||||
while (cursor.Next(presenter)) {
|
||||
if (presenter->GetAction() && presenter->GetAction()->GetObjectId() == g_unk0x100f31b0 &&
|
||||
presenter->GetAction()->GetAtomId() == *g_unk0x100f31b4) {
|
||||
presenter->GetAction()->GetAtomId().GetInternal() == g_unk0x100f31b4) {
|
||||
if (((MxControlPresenter*) presenter)->FUN_10044480(&m_event, m_unk0x14)) {
|
||||
FUN_100292e0();
|
||||
}
|
||||
|
||||
@ -114,7 +114,7 @@ MxBool MxControlPresenter::FUN_10044480(LegoControlManagerEvent* p_event, MxPres
|
||||
case c_notificationButtonUp:
|
||||
if (m_unk0x4c == 0 || m_unk0x4c == 2 || m_unk0x4c == 3) {
|
||||
p_event->SetClickedObjectId(m_action->GetObjectId());
|
||||
p_event->SetClickedAtom(&m_action->GetAtomId());
|
||||
p_event->SetClickedAtom(m_action->GetAtomId().GetInternal());
|
||||
VTable0x6c(0);
|
||||
p_event->SetType(c_notificationType17);
|
||||
p_event->SetUnknown0x28(m_unk0x4e);
|
||||
@ -124,7 +124,7 @@ MxBool MxControlPresenter::FUN_10044480(LegoControlManagerEvent* p_event, MxPres
|
||||
case c_notificationButtonDown:
|
||||
if (FUN_10044270(p_event->GetX(), p_event->GetY(), p_presenter)) {
|
||||
p_event->SetClickedObjectId(m_action->GetObjectId());
|
||||
p_event->SetClickedAtom(&m_action->GetAtomId());
|
||||
p_event->SetClickedAtom(m_action->GetAtomId().GetInternal());
|
||||
VTable0x6c(m_unk0x56);
|
||||
p_event->SetType(c_notificationType17);
|
||||
p_event->SetUnknown0x28(m_unk0x4e);
|
||||
@ -138,7 +138,7 @@ MxBool MxControlPresenter::FUN_10044480(LegoControlManagerEvent* p_event, MxPres
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10044540
|
||||
void MxControlPresenter::VTable0x6c(undefined4)
|
||||
void MxControlPresenter::VTable0x6c(undefined2)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ DECOMP_SIZE_ASSERT(LegoEventQueue, 0x18)
|
||||
MxS32 g_unk0x100f31b0 = -1;
|
||||
|
||||
// GLOBAL: LEGO1 0x100f31b4
|
||||
const MxAtomId* g_unk0x100f31b4 = 0;
|
||||
const char* g_unk0x100f31b4 = NULL;
|
||||
|
||||
// FUNCTION: LEGO1 0x1005b790
|
||||
LegoInputManager::LegoInputManager()
|
||||
@ -424,5 +424,5 @@ void LegoInputManager::EnableInputProcessing()
|
||||
{
|
||||
m_unk0x88 = FALSE;
|
||||
g_unk0x100f31b0 = -1;
|
||||
g_unk0x100f31b4 = 0;
|
||||
g_unk0x100f31b4 = NULL;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user