From 50d15ec3f2c956d61508687effba4ac75c73f3af Mon Sep 17 00:00:00 2001 From: Misha <106913236+MishaProductions@users.noreply.github.com> Date: Thu, 28 Dec 2023 11:21:44 -0500 Subject: [PATCH] Implement Lego3DManager --- CMakeLists.txt | 2 ++ LEGO1/lego3dmanager.cpp | 46 +++++++++++++++++++++++++++++++++++++ LEGO1/lego3dmanager.h | 16 ++++++++++--- LEGO1/lego3dview.cpp | 19 +++++++++++++++ LEGO1/lego3dview.h | 6 +++++ LEGO1/mxrendersettings.cpp | 19 +++++++++++++++ LEGO1/mxrendersettings.h | 26 +++++++++++++++++++++ LEGO1/mxunknown100dbdbc.cpp | 6 +++++ LEGO1/mxunknown100dbdbc.h | 3 ++- 9 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 LEGO1/lego3dmanager.cpp create mode 100644 LEGO1/mxrendersettings.cpp create mode 100644 LEGO1/mxrendersettings.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3650c718..cdf37ff1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,6 +47,7 @@ add_library(lego1 SHARED LEGO1/jukebox.cpp LEGO1/jukeboxentity.cpp LEGO1/jukeboxstate.cpp + LEGO1/lego3dmanager.cpp LEGO1/lego3dview.cpp LEGO1/legoact2state.cpp LEGO1/legoactioncontrolpresenter.cpp @@ -161,6 +162,7 @@ add_library(lego1 SHARED LEGO1/mxramstreamcontroller.cpp LEGO1/mxramstreamprovider.cpp LEGO1/mxregion.cpp + LEGO1/mxrendersettings.cpp LEGO1/mxscheduler.cpp LEGO1/mxsemaphore.cpp LEGO1/mxsmack.cpp diff --git a/LEGO1/lego3dmanager.cpp b/LEGO1/lego3dmanager.cpp new file mode 100644 index 00000000..e174e54a --- /dev/null +++ b/LEGO1/lego3dmanager.cpp @@ -0,0 +1,46 @@ +#include "lego3dmanager.h" + +#include "decomp.h" +#include "mxrendersettings.h" +#include "mxunknown100dbdbc.h" +#include "tgl/tgl.h" + +DECOMP_SIZE_ASSERT(Lego3DManager, 0x10); + +// FUNCTION: LEGO1 0x100ab320 +Lego3DManager::Lego3DManager() +{ + m_render = NULL; + m_3dView = NULL; + m_unk0x0c = NULL; +} + +// FUNCTION: LEGO1 0x100ab360 +Lego3DManager::~Lego3DManager() +{ + Destroy(); +} + +// FUNCTION: LEGO1 0x100ab370 +void Lego3DManager::Init(MxRenderSettings& p_settings) +{ + m_unk0x0c = new MxUnknown100dbdbc(); + m_render = Tgl::CreateRenderer(); + m_3dView = new Lego3DView(); + + MxRenderSettings settings; + settings = p_settings; + + m_3dView->Init(settings, *m_render); +} + +// FUNCTION: LEGO1 0x100ab460 +void Lego3DManager::Destroy() +{ + delete m_3dView; + m_3dView = NULL; + delete m_render; + m_render = NULL; + delete m_unk0x0c; + m_unk0x0c = NULL; +} diff --git a/LEGO1/lego3dmanager.h b/LEGO1/lego3dmanager.h index 3e1cf202..81d2817f 100644 --- a/LEGO1/lego3dmanager.h +++ b/LEGO1/lego3dmanager.h @@ -3,14 +3,24 @@ #include "lego3dview.h" +class MxUnknown100dbdbc; + +// VTABLE: 0x100ab320 +// SIZE: 0x10 class Lego3DManager { public: + Lego3DManager(); + virtual ~Lego3DManager(); + inline Lego3DView* GetLego3DView() { return this->m_3dView; } private: - undefined4 m_unk0x00; // 0x00 - undefined4 m_unk0x04; // 0x04 - Lego3DView* m_3dView; // 0x08 + Tgl::Renderer* m_render; // 0x04 + Lego3DView* m_3dView; // 0x08 + MxUnknown100dbdbc* m_unk0x0c; // 0x0c + + void Init(MxRenderSettings& p_settings); + void Destroy(); }; #endif // LEGO3DMANAGER_H diff --git a/LEGO1/lego3dview.cpp b/LEGO1/lego3dview.cpp index 0bb384e8..2b7405fd 100644 --- a/LEGO1/lego3dview.cpp +++ b/LEGO1/lego3dview.cpp @@ -1,6 +1,25 @@ #include "lego3dview.h" #include "legoroi.h" +#include "tgl/tgl.h" + +// STUB: LEGO1 0x100aae90 +Lego3DView::Lego3DView() +{ + +} + +// STUB: LEGO1 0x100aaf30 +Lego3DView::~Lego3DView() +{ + +} + +// STUB: LEGO1 0x +MxBool Lego3DView::Init(MxRenderSettings& p_renderSettings, Tgl::Renderer& render) +{ + return FALSE; +} // STUB: LEGO1 0x100ab2b0 LegoROI* Lego3DView::PickROI(MxLong p_a, MxLong p_b) diff --git a/LEGO1/lego3dview.h b/LEGO1/lego3dview.h index b984ad0f..ea7acfd7 100644 --- a/LEGO1/lego3dview.h +++ b/LEGO1/lego3dview.h @@ -6,11 +6,17 @@ #include "viewmanager/viewmanager.h" class LegoROI; +class MxRenderSettings; +class Tgl::Renderer; class Lego3DView { public: + Lego3DView(); + virtual ~Lego3DView(); + inline ViewManager* GetViewManager() { return this->m_viewManager; } inline TglImpl::ViewImpl* GetViewPort() { return this->m_viewPort; } + MxBool Init(MxRenderSettings& p_renderSettings, Tgl::Renderer& render); LegoROI* PickROI(MxLong p_a, MxLong p_b); private: diff --git a/LEGO1/mxrendersettings.cpp b/LEGO1/mxrendersettings.cpp new file mode 100644 index 00000000..214f66e3 --- /dev/null +++ b/LEGO1/mxrendersettings.cpp @@ -0,0 +1,19 @@ +#include "mxrendersettings.h" + +#include "decomp.h" + +// FUNCTION: LEGO1 0x100ab2d0 +MxU32 MxRenderSettings::operator=(const MxRenderSettings& p_settings) +{ + this->m_unk0x00 = p_settings.m_unk0x00; + this->m_hwnd = p_settings.m_hwnd; + this->m_directDraw = p_settings.m_directDraw; + this->m_ddSurface1 = p_settings.m_ddSurface1; + this->m_ddSurface2 = p_settings.m_ddSurface2; + this->m_flags = p_settings.m_flags; + this->m_unk0x18 = p_settings.m_unk0x18; + this->m_flags2 = p_settings.m_flags2; + this->m_direct3d = p_settings.m_direct3d; + this->m_d3dDevice = p_settings.m_d3dDevice; + return 1; +} diff --git a/LEGO1/mxrendersettings.h b/LEGO1/mxrendersettings.h new file mode 100644 index 00000000..2dcb7ecf --- /dev/null +++ b/LEGO1/mxrendersettings.h @@ -0,0 +1,26 @@ +#ifndef MXRENDERSETTINGS_H +#define MXRENDERSETTING_H + +#include "decomp.h" +#include "mxtypes.h" + +#include +#include +#include + +class MxRenderSettings { +public: + MxU32 operator=(const MxRenderSettings& p_settings); + + undefined4 m_unk0x00; // 0x00 + HWND m_hwnd; // 0x04 + IDirectDraw* m_directDraw; // 0x08 + IDirectDrawSurface* m_ddSurface1; // 0x0c + IDirectDrawSurface* m_ddSurface2; // 0x10 + MxU32 m_flags; // 0x14 + undefined4 m_unk0x18; // 0x18 + MxU32 m_flags2; // 0x1c + IDirect3D* m_direct3d; // 0x20 + IDirect3DDevice* m_d3dDevice; // 0x24 +}; +#endif // MXRENDERSETTINGS_H diff --git a/LEGO1/mxunknown100dbdbc.cpp b/LEGO1/mxunknown100dbdbc.cpp index a420454a..64254f0b 100644 --- a/LEGO1/mxunknown100dbdbc.cpp +++ b/LEGO1/mxunknown100dbdbc.cpp @@ -9,3 +9,9 @@ MxUnknown100dbdbc::MxUnknown100dbdbc() { // TODO } + +// STUB: LEGO1 0x100a7130 +MxUnknown100dbdbc::~MxUnknown100dbdbc() +{ + // TODO +} diff --git a/LEGO1/mxunknown100dbdbc.h b/LEGO1/mxunknown100dbdbc.h index 157058a7..b5049760 100644 --- a/LEGO1/mxunknown100dbdbc.h +++ b/LEGO1/mxunknown100dbdbc.h @@ -9,9 +9,10 @@ class MxUnknown100dbdbc { public: MxUnknown100dbdbc(); + virtual ~MxUnknown100dbdbc(); private: - undefined m_unk0x4[0x14]; // TODO: change to 0x10 once scalar deconstructor is added + undefined m_unk0x4[0x10]; }; #endif // MXUNKNOWN100DBDBC_H