A bunch of fixes

This commit is contained in:
Christian Semmler 2023-12-16 13:05:42 -05:00
parent b63aca7320
commit cb80c50736
10 changed files with 39 additions and 48 deletions

View File

@ -8,8 +8,8 @@ class Lego3DManager {
inline Lego3DView* GetLego3DView() { return this->m_3dView; } inline Lego3DView* GetLego3DView() { return this->m_3dView; }
private: private:
undefined4 m_unk0x00; undefined4 m_unk0x00; // 0x00
undefined4 m_unk0x04; undefined4 m_unk0x04; // 0x04
Lego3DView* m_3dView; // 0x08 Lego3DView* m_3dView; // 0x08
}; };

View File

@ -236,8 +236,7 @@ void FUN_1001a700()
// FUNCTION: LEGO1 0x1003dd70 // FUNCTION: LEGO1 0x1003dd70
LegoROI* PickROI(MxLong p_a, MxLong p_b) LegoROI* PickROI(MxLong p_a, MxLong p_b)
{ {
LegoVideoManager* vid = VideoManager(); return VideoManager()->Get3DManager()->GetLego3DView()->PickROI(p_a, p_b);
return vid->Get3DManager()->GetLego3DView()->PickROI(p_a, p_b);
} }
// STUB: LEGO1 0x1003ddc0 // STUB: LEGO1 0x1003ddc0
@ -562,10 +561,9 @@ LegoEntity* LegoOmni::FindByEntityIdOrAtomId(const MxAtomId& p_atom, MxS32 p_ent
} }
// STUB: LEGO1 0x1005b1d0 // STUB: LEGO1 0x1005b1d0
MxResult LegoOmni::DeleteObject(MxDSAction& p_dsAction) void LegoOmni::DeleteObject(MxDSAction& p_dsAction)
{ {
// TODO // TODO
return FAILURE;
} }
// FUNCTION: LEGO1 0x1005b2f0 // FUNCTION: LEGO1 0x1005b2f0

View File

@ -89,7 +89,7 @@ class LegoOmni : public MxOmni {
virtual MxResult Create(MxOmniCreateParam& p_param) override; // vtable+18 virtual MxResult Create(MxOmniCreateParam& p_param) override; // vtable+18
virtual void Destroy() override; // vtable+1c virtual void Destroy() override; // vtable+1c
virtual MxResult Start(MxDSAction* p_dsAction) override; // vtable+20 virtual MxResult Start(MxDSAction* p_dsAction) override; // vtable+20
virtual MxResult DeleteObject(MxDSAction& p_dsAction) override; // vtable+24 virtual void DeleteObject(MxDSAction& p_dsAction) override; // vtable+24
virtual MxBool DoesEntityExist(MxDSAction& p_dsAction) override; // vtable+28 virtual MxBool DoesEntityExist(MxDSAction& p_dsAction) override; // vtable+28
virtual MxEntity* FindWorld(const char* p_id, MxS32 p_entityId, MxPresenter* p_presenter) override; // vtable+30 virtual MxEntity* FindWorld(const char* p_id, MxS32 p_entityId, MxPresenter* p_presenter) override; // vtable+30
virtual void NotifyCurrentEntity(MxNotificationParam* p_param) override; // vtable+34 virtual void NotifyCurrentEntity(MxNotificationParam* p_param) override; // vtable+34

View File

@ -51,7 +51,7 @@ class LegoWorld : public LegoEntity {
MxBool FUN_10072980(MxU32, Vector3Data& p_loc, Vector3Data& p_dir, Vector3Data& p_up); MxBool FUN_10072980(MxU32, Vector3Data& p_loc, Vector3Data& p_dir, Vector3Data& p_up);
void FUN_10073400(); void FUN_10073400();
void FUN_10073430(); void FUN_10073430();
int GetCurrPathInfo(LegoPathBoundary** p_path, int& p_value); MxS32 GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value);
protected: protected:
LegoPathControllerList m_list0x68; // 0x68 LegoPathControllerList m_list0x68; // 0x68

View File

@ -66,9 +66,6 @@ class MxStartActionNotificationParam : public MxActionNotificationParam {
{ {
} }
// FUNCTION: LEGO1 0x100b04a0
inline virtual ~MxStartActionNotificationParam() override {}
virtual MxNotificationParam* Clone() override; // vtable+0x4 virtual MxNotificationParam* Clone() override; // vtable+0x4
}; };
@ -99,21 +96,19 @@ class MxType4NotificationParam : public MxActionNotificationParam {
m_unk0x14 = p_unk0x14; m_unk0x14 = p_unk0x14;
} }
// FUNCTION: LEGO1 0x100b0630
inline virtual ~MxType4NotificationParam() override {}
virtual MxNotificationParam* Clone() override; // vtable+0x4 virtual MxNotificationParam* Clone() override; // vtable+0x4
private: private:
MxPresenter* m_unk0x14; // 0x14 MxPresenter* m_unk0x14; // 0x14
}; };
// SYNTHETIC: LEGO1 0x100b0430
// MxStartActionNotificationParam::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x100513a0 // SYNTHETIC: LEGO1 0x100513a0
// MxEndActionNotificationParam::`scalar deleting destructor' // MxEndActionNotificationParam::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x100b0430
// MxStartActionNotificationParam::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x100b05c0 // SYNTHETIC: LEGO1 0x100b05c0
// MxType4NotificationParam::`scalar deleting destructor' // MxType4NotificationParam::`scalar deleting destructor'
#endif #endif

View File

@ -114,9 +114,9 @@ MxEventManager* EventManager()
} }
// FUNCTION: LEGO1 0x100acf70 // FUNCTION: LEGO1 0x100acf70
MxResult DeleteObject(MxDSAction& p_dsAction) void DeleteObject(MxDSAction& p_dsAction)
{ {
return MxOmni::GetInstance()->DeleteObject(p_dsAction); MxOmni::GetInstance()->DeleteObject(p_dsAction);
} }
// FUNCTION: LEGO1 0x100aef10 // FUNCTION: LEGO1 0x100aef10
@ -313,14 +313,11 @@ MxResult MxOmni::Start(MxDSAction* p_dsAction)
} }
// FUNCTION: LEGO1 0x100b00c0 // FUNCTION: LEGO1 0x100b00c0
MxResult MxOmni::DeleteObject(MxDSAction& p_dsAction) void MxOmni::DeleteObject(MxDSAction& p_dsAction)
{ {
MxResult result;
if (m_streamer != NULL) { if (m_streamer != NULL) {
result = m_streamer->DeleteObject(&p_dsAction); m_streamer->DeleteObject(&p_dsAction);
} }
return result;
} }
// FUNCTION: LEGO1 0x100b00e0 // FUNCTION: LEGO1 0x100b00e0
@ -328,10 +325,11 @@ MxResult MxOmni::CreatePresenter(MxStreamController* p_controller, MxDSAction& p
{ {
MxResult result = FAILURE; MxResult result = FAILURE;
MxPresenter* object = (MxPresenter*) m_objectFactory->Create(PresenterNameDispatch(p_action)); MxPresenter* object = (MxPresenter*) m_objectFactory->Create(PresenterNameDispatch(p_action));
if (object) { if (object) {
if (object->AddToManager() == SUCCESS) { if (object->AddToManager() == SUCCESS) {
MxPresenter* sender = (MxPresenter*) p_action.GetUnknown28(); MxPresenter* sender = p_action.GetUnknown28();
if (sender == NULL && (sender = (MxPresenter*) p_controller->FUN_100c1e70(p_action)) == NULL) { if (sender == NULL && (sender = p_controller->FUN_100c1e70(p_action)) == NULL) {
if (p_action.GetOrigin() == NULL) { if (p_action.GetOrigin() == NULL) {
p_action.SetOrigin(this); p_action.SetOrigin(this);
} }
@ -345,10 +343,7 @@ MxResult MxOmni::CreatePresenter(MxStreamController* p_controller, MxDSAction& p
if (object->StartAction(p_controller, &p_action) == SUCCESS) { if (object->StartAction(p_controller, &p_action) == SUCCESS) {
if (sender) { if (sender) {
NotificationManager()->Send( NotificationManager()->Send(sender, &MxType4NotificationParam(this, &p_action, object));
p_action.GetUnknown84(),
&MxType4NotificationParam(this, &p_action, object)
);
} }
if (p_action.GetUnknown84()) { if (p_action.GetUnknown84()) {
@ -379,9 +374,10 @@ void MxOmni::DestroyInstance()
} }
} }
MxBool MxOmni::FUN_100b06b0(MxDSAction* p_action) // STUB: LEGO1 0x100b06b0
MxBool MxOmni::FUN_100b06b0(MxDSAction* p_action, const char* p_name)
{ {
// TODO STUB // TODO
return FAILURE; return FAILURE;
} }
@ -401,9 +397,11 @@ MxLong MxOmni::HandleActionEnd(MxParam& p_param)
{ {
MxDSAction* action = ((MxEndActionNotificationParam&) p_param).GetAction(); MxDSAction* action = ((MxEndActionNotificationParam&) p_param).GetAction();
MxStreamController* controller = Streamer()->GetOpenStream(action->GetAtomId().GetInternal()); MxStreamController* controller = Streamer()->GetOpenStream(action->GetAtomId().GetInternal());
if (controller != NULL) { if (controller != NULL) {
if (controller->GetUnk0x54().Find(action, FALSE)) { action = controller->GetUnk0x54().Find(action, FALSE);
if (FUN_100b06b0(action) == FALSE) { if (action) {
if (FUN_100b06b0(action, "LegoLoopingAnimPresenter") == FALSE) {
delete controller->GetUnk0x54().Find(action, TRUE); delete controller->GetUnk0x54().Find(action, TRUE);
} }
} }
@ -416,6 +414,7 @@ MxLong MxOmni::HandleActionEnd(MxParam& p_param)
if (((MxEndActionNotificationParam&) p_param).GetAction()) { if (((MxEndActionNotificationParam&) p_param).GetAction()) {
delete ((MxEndActionNotificationParam&) p_param).GetAction(); delete ((MxEndActionNotificationParam&) p_param).GetAction();
} }
return 1; return 1;
} }

View File

@ -45,7 +45,7 @@ class MxOmni : public MxCore {
virtual MxResult Create(MxOmniCreateParam& p_param); // vtable+18 virtual MxResult Create(MxOmniCreateParam& p_param); // vtable+18
virtual void Destroy(); // vtable+1c virtual void Destroy(); // vtable+1c
virtual MxResult Start(MxDSAction* p_dsAction); // vtable+20 virtual MxResult Start(MxDSAction* p_dsAction); // vtable+20
virtual MxResult DeleteObject(MxDSAction& p_dsAction); // vtable+24 virtual void DeleteObject(MxDSAction& p_dsAction); // vtable+24
virtual MxBool DoesEntityExist(MxDSAction& p_dsAction); // vtable+28 virtual MxBool DoesEntityExist(MxDSAction& p_dsAction); // vtable+28
virtual MxResult CreatePresenter(MxStreamController* p_controller, MxDSAction& p_action); // vtable+2c virtual MxResult CreatePresenter(MxStreamController* p_controller, MxDSAction& p_action); // vtable+2c
virtual MxEntity* FindWorld(const char*, MxS32, MxPresenter*); // vtable+30 virtual MxEntity* FindWorld(const char*, MxS32, MxPresenter*); // vtable+30
@ -53,8 +53,10 @@ class MxOmni : public MxCore {
virtual void StartTimer(); // vtable+38 virtual void StartTimer(); // vtable+38
virtual void StopTimer(); // vtable+3c virtual void StopTimer(); // vtable+3c
virtual MxBool IsTimerRunning(); // vtable+40 virtual MxBool IsTimerRunning(); // vtable+40
static void SetInstance(MxOmni* p_instance); static void SetInstance(MxOmni* p_instance);
static MxBool FUN_100b06b0(MxDSAction* p_action); static MxBool FUN_100b06b0(MxDSAction* p_action, const char* p_name);
HWND GetWindowHandle() const { return this->m_windowHandle; } HWND GetWindowHandle() const { return this->m_windowHandle; }
MxObjectFactory* GetObjectFactory() const { return this->m_objectFactory; } MxObjectFactory* GetObjectFactory() const { return this->m_objectFactory; }
MxNotificationManager* GetNotificationManager() const { return this->m_notificationManager; } MxNotificationManager* GetNotificationManager() const { return this->m_notificationManager; }
@ -84,13 +86,11 @@ class MxOmni : public MxCore {
MxEventManager* m_eventManager; // 0x38 MxEventManager* m_eventManager; // 0x38
MxTimer* m_timer; // 0x3C MxTimer* m_timer; // 0x3C
MxStreamer* m_streamer; // 0x40 MxStreamer* m_streamer; // 0x40
MxAtomIdCounterSet* m_atomIdCounterSet; // 0x44 MxAtomIdCounterSet* m_atomIdCounterSet; // 0x44
MxCriticalSection m_criticalsection; // 0x48 MxCriticalSection m_criticalsection; // 0x48
MxBool m_timerRunning; // 0x64 MxBool m_timerRunning; // 0x64
}; };
__declspec(dllexport) MxTickleManager* TickleManager(); __declspec(dllexport) MxTickleManager* TickleManager();
__declspec(dllexport) MxTimer* Timer(); __declspec(dllexport) MxTimer* Timer();
__declspec(dllexport) MxStreamer* Streamer(); __declspec(dllexport) MxStreamer* Streamer();
@ -103,7 +103,7 @@ __declspec(dllexport) MxNotificationManager* NotificationManager();
MxVideoManager* MVideoManager(); MxVideoManager* MVideoManager();
MxAtomIdCounterSet* AtomIdCounterSet(); MxAtomIdCounterSet* AtomIdCounterSet();
MxObjectFactory* ObjectFactory(); MxObjectFactory* ObjectFactory();
MxResult DeleteObject(MxDSAction& p_dsAction); void DeleteObject(MxDSAction& p_dsAction);
void DeleteObjects(MxAtomId* p_id, MxS32 p_first, MxS32 p_last); void DeleteObjects(MxAtomId* p_id, MxS32 p_first, MxS32 p_last);
#endif // MXOMNI_H #endif // MXOMNI_H

View File

@ -10,7 +10,6 @@
class MxCompositePresenter; class MxCompositePresenter;
class MxStreamController; class MxStreamController;
class MxPresenter;
// VTABLE: LEGO1 0x100d4d38 // VTABLE: LEGO1 0x100d4d38
// SIZE 0x40 // SIZE 0x40

View File

@ -134,14 +134,14 @@ MxResult MxStreamController::VTable0x30(MxDSAction* p_action)
} }
// FUNCTION: LEGO1 0x100c1e70 // FUNCTION: LEGO1 0x100c1e70
MxCore* MxStreamController::FUN_100c1e70(MxDSAction& p_action) MxPresenter* MxStreamController::FUN_100c1e70(MxDSAction& p_action)
{ {
MxAutoLocker locker(&m_criticalSection); MxAutoLocker locker(&m_criticalSection);
MxCore* result = NULL; MxPresenter* result = NULL;
if (p_action.GetObjectId() != -1) { if (p_action.GetObjectId() != -1) {
MxDSAction* action = m_unk0x3c.Find(&p_action, FALSE); MxDSAction* action = m_unk0x3c.Find(&p_action, FALSE);
if (action != NULL) { if (action != NULL) {
result = (MxCore*) action->GetUnknown28(); result = action->GetUnknown28();
} }
} }

View File

@ -44,7 +44,7 @@ class MxStreamController : public MxCore {
MxResult FUN_100c1800(MxDSAction* p_action, MxU32 p_val); MxResult FUN_100c1800(MxDSAction* p_action, MxU32 p_val);
MxBool FUN_100c20d0(MxDSObject& p_obj); MxBool FUN_100c20d0(MxDSObject& p_obj);
MxResult FUN_100c1a00(MxDSAction* p_action, MxU32 p_bufferval); MxResult FUN_100c1a00(MxDSAction* p_action, MxU32 p_bufferval);
MxCore* FUN_100c1e70(MxDSAction& p_action); MxPresenter* FUN_100c1e70(MxDSAction& p_action);
MxResult FUN_100c1f00(MxDSAction* p_action); MxResult FUN_100c1f00(MxDSAction* p_action);
inline MxAtomId& GetAtom() { return m_atom; }; inline MxAtomId& GetAtom() { return m_atom; };