Implement Lego3DManager

This commit is contained in:
Misha 2023-12-28 11:21:44 -05:00
parent d5854a46ae
commit 50d15ec3f2
No known key found for this signature in database
GPG Key ID: 8441D12AEF33FED8
9 changed files with 139 additions and 4 deletions

View File

@ -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

46
LEGO1/lego3dmanager.cpp Normal file
View File

@ -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;
}

View File

@ -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

View File

@ -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)

View File

@ -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:

View File

@ -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;
}

26
LEGO1/mxrendersettings.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef MXRENDERSETTINGS_H
#define MXRENDERSETTING_H
#include "decomp.h"
#include "mxtypes.h"
#include <d3d.h>
#include <ddraw.h>
#include <windows.h>
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

View File

@ -9,3 +9,9 @@ MxUnknown100dbdbc::MxUnknown100dbdbc()
{
// TODO
}
// STUB: LEGO1 0x100a7130
MxUnknown100dbdbc::~MxUnknown100dbdbc()
{
// TODO
}

View File

@ -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