mirror of
https://github.com/isledecomp/isle.git
synced 2024-11-22 15:48:09 -05:00
Fix LegoROI / add TimeROI (#572)
* Fix LegoROI / add TimeROI * Fix order * Remove extra fwd decl
This commit is contained in:
parent
b47412183b
commit
332d8da695
14 changed files with 117 additions and 64 deletions
|
@ -489,7 +489,10 @@ if (MSVC)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (MSVC_FOR_DECOMP)
|
if (MSVC_FOR_DECOMP)
|
||||||
target_compile_definitions(lego1 PRIVATE "ENABLE_DECOMP_ASSERTS")
|
foreach(tgt IN LISTS lego1_targets)
|
||||||
|
target_compile_definitions(${tgt} PRIVATE "ENABLE_DECOMP_ASSERTS")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
if (TARGET isle)
|
if (TARGET isle)
|
||||||
target_compile_definitions(isle PRIVATE "ENABLE_DECOMP_ASSERTS")
|
target_compile_definitions(isle PRIVATE "ENABLE_DECOMP_ASSERTS")
|
||||||
endif()
|
endif()
|
||||||
|
@ -533,7 +536,7 @@ if (MSVC_FOR_DECOMP)
|
||||||
# Older MSVC versions don't support building in parallel.
|
# Older MSVC versions don't support building in parallel.
|
||||||
# Force non-parallel builds of isle and lego1 by putting them in a pool with 1 available job.
|
# Force non-parallel builds of isle and lego1 by putting them in a pool with 1 available job.
|
||||||
if (CMAKE_CXX_COMPILER_ID VERSION_LESS 12)
|
if (CMAKE_CXX_COMPILER_ID VERSION_LESS 12)
|
||||||
foreach(tgt IN LISTS lego1_taregets)
|
foreach(tgt IN LISTS lego1_targets)
|
||||||
set_property(GLOBAL APPEND PROPERTY JOB_POOLS "msvc_${tgt}=1;msvc_lego1=1")
|
set_property(GLOBAL APPEND PROPERTY JOB_POOLS "msvc_${tgt}=1;msvc_lego1=1")
|
||||||
set_property(TARGET ${tgt} PROPERTY JOB_POOL_COMPILE msvc_${tgt})
|
set_property(TARGET ${tgt} PROPERTY JOB_POOL_COMPILE msvc_${tgt})
|
||||||
set_property(TARGET ${tgt} PROPERTY JOB_POOL_LINK msvc_${tgt})
|
set_property(TARGET ${tgt} PROPERTY JOB_POOL_LINK msvc_${tgt})
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include "mxvideopresenter.h"
|
#include "mxvideopresenter.h"
|
||||||
|
|
||||||
class AutoROI;
|
class LegoROI;
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100d4e50
|
// VTABLE: LEGO1 0x100d4e50
|
||||||
// SIZE 0x6c (discovered through inline constructor at 0x10009ae6)
|
// SIZE 0x6c (discovered through inline constructor at 0x10009ae6)
|
||||||
|
@ -38,7 +38,7 @@ class LegoModelPresenter : public MxVideoPresenter {
|
||||||
void Destroy(MxBool p_fromDestructor);
|
void Destroy(MxBool p_fromDestructor);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AutoROI* m_roi; // 0x64
|
LegoROI* m_roi; // 0x64
|
||||||
MxBool m_addedToView; // 0x68
|
MxBool m_addedToView; // 0x68
|
||||||
|
|
||||||
MxResult CreateROI(MxStreamChunk* p_chunk);
|
MxResult CreateROI(MxStreamChunk* p_chunk);
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
#include "lego/sources/misc/legostorage.h"
|
#include "lego/sources/misc/legostorage.h"
|
||||||
#include "mxtypes.h"
|
#include "mxtypes.h"
|
||||||
|
|
||||||
class AutoROI;
|
|
||||||
class LegoROI;
|
class LegoROI;
|
||||||
|
|
||||||
struct LegoSaveDataEntry3 {
|
struct LegoSaveDataEntry3 {
|
||||||
|
@ -39,7 +38,7 @@ class LegoUnkSaveDataWriter {
|
||||||
LegoUnkSaveDataWriter();
|
LegoUnkSaveDataWriter();
|
||||||
|
|
||||||
MxResult WriteSaveData3(LegoStorage* p_stream);
|
MxResult WriteSaveData3(LegoStorage* p_stream);
|
||||||
AutoROI* FUN_10083500(char*, undefined4);
|
LegoROI* FUN_10083500(char*, undefined4);
|
||||||
void FUN_100832a0();
|
void FUN_100832a0();
|
||||||
void FUN_10083db0(LegoROI* p_roi);
|
void FUN_10083db0(LegoROI* p_roi);
|
||||||
void FUN_10083f10(LegoROI* p_roi);
|
void FUN_10083f10(LegoROI* p_roi);
|
||||||
|
|
|
@ -67,7 +67,7 @@ class LegoWorld : public LegoEntity {
|
||||||
inline LegoCameraController* GetCamera() { return m_cameraController; }
|
inline LegoCameraController* GetCamera() { return m_cameraController; }
|
||||||
inline MxS32 GetScriptIndex() { return m_scriptIndex; }
|
inline MxS32 GetScriptIndex() { return m_scriptIndex; }
|
||||||
inline MxCoreSet& GetUnknown0xd0() { return m_set0xd0; }
|
inline MxCoreSet& GetUnknown0xd0() { return m_set0xd0; }
|
||||||
inline list<AutoROI*>& GetUnknownList0xe0() { return m_list0xe0; }
|
inline list<LegoROI*>& GetUnknownList0xe0() { return m_list0xe0; }
|
||||||
|
|
||||||
inline void SetScriptIndex(MxS32 p_scriptIndex) { m_scriptIndex = p_scriptIndex; }
|
inline void SetScriptIndex(MxS32 p_scriptIndex) { m_scriptIndex = p_scriptIndex; }
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ class LegoWorld : public LegoEntity {
|
||||||
MxCoreSet m_set0xa8; // 0xa8
|
MxCoreSet m_set0xa8; // 0xa8
|
||||||
MxPresenterList m_controlPresenters; // 0xb8
|
MxPresenterList m_controlPresenters; // 0xb8
|
||||||
MxCoreSet m_set0xd0; // 0xd0
|
MxCoreSet m_set0xd0; // 0xd0
|
||||||
list<AutoROI*> m_list0xe0; // 0xe0
|
list<LegoROI*> m_list0xe0; // 0xe0
|
||||||
MxS32 m_scriptIndex; // 0xec
|
MxS32 m_scriptIndex; // 0xec
|
||||||
LegoHideAnimPresenter* m_hideAnimPresenter; // 0xf0
|
LegoHideAnimPresenter* m_hideAnimPresenter; // 0xf0
|
||||||
MxS16 m_startupTicks; // 0xf4
|
MxS16 m_startupTicks; // 0xf4
|
||||||
|
@ -116,13 +116,13 @@ class LegoWorld : public LegoEntity {
|
||||||
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Init
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Init
|
||||||
|
|
||||||
// TEMPLATE: LEGO1 0x1001ddf0
|
// TEMPLATE: LEGO1 0x1001ddf0
|
||||||
// list<AutoROI *,allocator<AutoROI *> >::~list<AutoROI *,allocator<AutoROI *> >
|
// list<LegoROI *,allocator<LegoROI *> >::~list<LegoROI *,allocator<LegoROI *> >
|
||||||
|
|
||||||
// TEMPLATE: LEGO1 0x1001df50
|
// TEMPLATE: LEGO1 0x1001df50
|
||||||
// List<AutoROI *>::~List<AutoROI *>
|
// List<LegoROI *>::~List<LegoROI *>
|
||||||
|
|
||||||
// TEMPLATE: LEGO1 0x1001de60
|
// TEMPLATE: LEGO1 0x1001de60
|
||||||
// list<AutoROI *,allocator<AutoROI *> >::_Buynode
|
// list<LegoROI *,allocator<LegoROI *> >::_Buynode
|
||||||
|
|
||||||
// TEMPLATE: LEGO1 0x1001de90
|
// TEMPLATE: LEGO1 0x1001de90
|
||||||
// set<MxCore *,CoreSetCompare,allocator<MxCore *> >::~set<MxCore *,CoreSetCompare,allocator<MxCore *> >
|
// set<MxCore *,CoreSetCompare,allocator<MxCore *> >::~set<MxCore *,CoreSetCompare,allocator<MxCore *> >
|
||||||
|
@ -131,7 +131,7 @@ class LegoWorld : public LegoEntity {
|
||||||
// Set<MxCore *,CoreSetCompare>::~Set<MxCore *,CoreSetCompare>
|
// Set<MxCore *,CoreSetCompare>::~Set<MxCore *,CoreSetCompare>
|
||||||
|
|
||||||
// TEMPLATE: LEGO1 0x1001f590
|
// TEMPLATE: LEGO1 0x1001f590
|
||||||
// list<AutoROI *,allocator<AutoROI *> >::erase
|
// list<LegoROI *,allocator<LegoROI *> >::erase
|
||||||
|
|
||||||
// TEMPLATE: LEGO1 0x100208b0
|
// TEMPLATE: LEGO1 0x100208b0
|
||||||
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::insert
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::insert
|
||||||
|
|
|
@ -71,7 +71,7 @@ MxResult LegoUnkSaveDataWriter::WriteSaveData3(LegoStorage* p_stream)
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10083500
|
// STUB: LEGO1 0x10083500
|
||||||
AutoROI* LegoUnkSaveDataWriter::FUN_10083500(char*, undefined4)
|
LegoROI* LegoUnkSaveDataWriter::FUN_10083500(char*, undefined4)
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
// involves an STL map with a _Nil node at 0x100fc508
|
// involves an STL map with a _Nil node at 0x100fc508
|
||||||
|
|
|
@ -204,7 +204,7 @@ void LegoWorld::Destroy(MxBool p_fromDestructor)
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!m_list0xe0.empty()) {
|
while (!m_list0xe0.empty()) {
|
||||||
AutoROI* roi = m_list0xe0.front();
|
LegoROI* roi = m_list0xe0.front();
|
||||||
m_list0xe0.pop_front();
|
m_list0xe0.pop_front();
|
||||||
delete roi;
|
delete roi;
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,9 +132,9 @@ void LegoModelPresenter::ParseExtra()
|
||||||
}
|
}
|
||||||
else if (KeyValueStringParse(output, g_dbCreate, buffer) != 0 && m_roi == NULL) {
|
else if (KeyValueStringParse(output, g_dbCreate, buffer) != 0 && m_roi == NULL) {
|
||||||
LegoWorld* currentWorld = CurrentWorld();
|
LegoWorld* currentWorld = CurrentWorld();
|
||||||
list<AutoROI*>& roiList = currentWorld->GetUnknownList0xe0();
|
list<LegoROI*>& roiList = currentWorld->GetUnknownList0xe0();
|
||||||
|
|
||||||
for (list<AutoROI*>::iterator it = roiList.begin(); it != roiList.end(); it++) {
|
for (list<LegoROI*>::iterator it = roiList.begin(); it != roiList.end(); it++) {
|
||||||
if (!strcmpi(((LegoROI*) (*it))->GetName(), output)) {
|
if (!strcmpi(((LegoROI*) (*it))->GetName(), output)) {
|
||||||
m_roi = *it;
|
m_roi = *it;
|
||||||
roiList.erase(it);
|
roiList.erase(it);
|
||||||
|
|
|
@ -183,7 +183,7 @@ MxResult LegoVideoManager::Create(MxVideoParam& p_videoParam, MxU32 p_frequencyM
|
||||||
}
|
}
|
||||||
|
|
||||||
pLODList = m_3dManager->GetViewLODListManager()->Create("CameraROI", 1);
|
pLODList = m_3dManager->GetViewLODListManager()->Create("CameraROI", 1);
|
||||||
m_viewROI = new LegoROI(m_renderer, pLODList, Timer()->GetTime());
|
m_viewROI = new TimeROI(m_renderer, pLODList, Timer()->GetTime());
|
||||||
pLODList->Release();
|
pLODList->Release();
|
||||||
|
|
||||||
CalcLocalTransform(posVec, dirVec, upVec, outMatrix);
|
CalcLocalTransform(posVec, dirVec, upVec, outMatrix);
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
DECOMP_SIZE_ASSERT(LegoROI, 0x10c);
|
DECOMP_SIZE_ASSERT(LegoROI, 0x108)
|
||||||
|
DECOMP_SIZE_ASSERT(TimeROI, 0x10c)
|
||||||
|
|
||||||
// SIZE 0x14
|
// SIZE 0x14
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -59,8 +60,44 @@ void LegoROI::configureLegoROI(int p_roiConfig)
|
||||||
g_roiConfig = p_roiConfig;
|
g_roiConfig = p_roiConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100a9a50
|
// FUNCTION: LEGO1 0x100a81d0
|
||||||
LegoROI::LegoROI(Tgl::Renderer* p_renderer, ViewLODList* p_lodList, int p_time) : ViewROI(p_renderer, p_lodList)
|
LegoROI::LegoROI(Tgl::Renderer* p_renderer) : ViewROI(p_renderer, NULL), m_unk0xe0(-1)
|
||||||
|
{
|
||||||
|
m_unk0xd4 = NULL;
|
||||||
|
m_name = NULL;
|
||||||
|
m_unk0x104 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100a82d0
|
||||||
|
LegoROI::LegoROI(Tgl::Renderer* p_renderer, ViewLODList* p_lodList) : ViewROI(p_renderer, p_lodList), m_unk0xe0(-1)
|
||||||
|
{
|
||||||
|
m_unk0xd4 = NULL;
|
||||||
|
m_name = NULL;
|
||||||
|
m_unk0x104 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100a83c0
|
||||||
|
LegoROI::~LegoROI()
|
||||||
|
{
|
||||||
|
if (comp) {
|
||||||
|
CompoundObject::iterator iterator;
|
||||||
|
|
||||||
|
for (iterator = comp->begin(); !(iterator == comp->end()); ++iterator) {
|
||||||
|
ROI* child = *iterator;
|
||||||
|
|
||||||
|
delete child;
|
||||||
|
}
|
||||||
|
|
||||||
|
delete comp;
|
||||||
|
comp = 0;
|
||||||
|
}
|
||||||
|
if (m_name) {
|
||||||
|
delete[] m_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100a9a50
|
||||||
|
TimeROI::TimeROI(Tgl::Renderer* p_renderer, ViewLODList* p_lodList, int p_time) : LegoROI(p_renderer, p_lodList)
|
||||||
{
|
{
|
||||||
m_time = p_time;
|
m_time = p_time;
|
||||||
}
|
}
|
||||||
|
@ -127,7 +164,6 @@ float LegoROI::IntrinsicImportance() const
|
||||||
return .5;
|
return .5;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: Actually part of parent class (doesn't exist yet)
|
|
||||||
// STUB: LEGO1 0x100aa350
|
// STUB: LEGO1 0x100aa350
|
||||||
void LegoROI::UpdateWorldBoundingVolumes()
|
void LegoROI::UpdateWorldBoundingVolumes()
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,20 +7,15 @@ typedef unsigned char (*ROIHandler)(char*, char*, unsigned int);
|
||||||
|
|
||||||
class LegoEntity;
|
class LegoEntity;
|
||||||
|
|
||||||
// Note: There is an extra class between LegoROI and ViewROI,
|
// VTABLE: LEGO1 0x100dbe38
|
||||||
// maybe called "AutoROI". VTABLE 0x100dbe38
|
// SIZE 0x108
|
||||||
|
|
||||||
// TODO: Set as superclass of LegoROI
|
|
||||||
class AutoROI : public ViewROI {};
|
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100dbea8
|
|
||||||
// SIZE 0x10c
|
|
||||||
class LegoROI : public ViewROI {
|
class LegoROI : public ViewROI {
|
||||||
public:
|
public:
|
||||||
LegoROI(Tgl::Renderer* p_renderer, ViewLODList* p_lodList, int p_time);
|
LegoROI(Tgl::Renderer* p_renderer);
|
||||||
|
LegoROI(Tgl::Renderer* p_renderer, ViewLODList* p_lodList);
|
||||||
|
~LegoROI() override;
|
||||||
|
|
||||||
float IntrinsicImportance() const override; // vtable+0x04
|
float IntrinsicImportance() const override; // vtable+0x04
|
||||||
// Note: Actually part of parent class (doesn't exist yet)
|
|
||||||
void UpdateWorldBoundingVolumes() override; // vtable+0x18
|
void UpdateWorldBoundingVolumes() override; // vtable+0x18
|
||||||
|
|
||||||
void SetDisplayBB(int p_displayBB);
|
void SetDisplayBB(int p_displayBB);
|
||||||
|
@ -40,19 +35,32 @@ class LegoROI : public ViewROI {
|
||||||
void FUN_100a46b0(Matrix4& p_transform);
|
void FUN_100a46b0(Matrix4& p_transform);
|
||||||
void FUN_100a58f0(Matrix4& p_transform);
|
void FUN_100a58f0(Matrix4& p_transform);
|
||||||
|
|
||||||
inline const char* GetName() { return m_name; }
|
inline const char* GetName() const { return m_name; }
|
||||||
inline LegoEntity* GetUnknown0x104() { return m_unk0x104; }
|
inline LegoEntity* GetUnknown0x104() { return m_unk0x104; }
|
||||||
|
|
||||||
inline void SetUnknown0x104(LegoEntity* p_unk0x104) { m_unk0x104 = p_unk0x104; }
|
inline void SetUnknown0x104(LegoEntity* p_unk0x104) { m_unk0x104 = p_unk0x104; }
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x100a9ad0
|
// SYNTHETIC: LEGO1 0x100a82b0
|
||||||
// LegoROI::`scalar deleting destructor'
|
// LegoROI::`scalar deleting destructor'
|
||||||
|
|
||||||
private:
|
private:
|
||||||
undefined4 m_unk0xe0; // 0xe0
|
int m_unk0xe0; // 0xe0
|
||||||
const char* m_name; // 0xe4
|
char* m_name; // 0xe4
|
||||||
undefined m_unk0xe8[0x1c]; // 0xe8
|
BoundingSphere m_sphere; // 0xe8
|
||||||
|
undefined4 m_unk0x100; // 0x100
|
||||||
LegoEntity* m_unk0x104; // 0x104
|
LegoEntity* m_unk0x104; // 0x104
|
||||||
|
};
|
||||||
|
|
||||||
|
// VTABLE: LEGO1 0x100dbea8
|
||||||
|
// SIZE 0x10c
|
||||||
|
class TimeROI : public LegoROI {
|
||||||
|
public:
|
||||||
|
TimeROI(Tgl::Renderer* p_renderer, ViewLODList* p_lodList, int p_time);
|
||||||
|
|
||||||
|
// SYNTHETIC: LEGO1 0x100a9ad0
|
||||||
|
// TimeROI::`scalar deleting destructor'
|
||||||
|
|
||||||
|
private:
|
||||||
int m_time; // 0x108
|
int m_time; // 0x108
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -53,8 +53,8 @@ void OrientableROI::UpdateWorldData(const MxMatrix& p_transform)
|
||||||
UpdateWorldVelocity();
|
UpdateWorldVelocity();
|
||||||
|
|
||||||
// iterate over comps
|
// iterate over comps
|
||||||
if (m_comp) {
|
if (comp) {
|
||||||
for (CompoundObject::iterator iter = m_comp->begin(); !(iter == m_comp->end()); iter++) {
|
for (CompoundObject::iterator iter = comp->begin(); !(iter == comp->end()); iter++) {
|
||||||
ROI* child = *iter;
|
ROI* child = *iter;
|
||||||
static_cast<OrientableROI*>(child)->UpdateWorldData(p_transform);
|
static_cast<OrientableROI*>(child)->UpdateWorldData(p_transform);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,8 @@ class BoundingBox {
|
||||||
Mx3DPointFloat& Max() { return max; }
|
Mx3DPointFloat& Max() { return max; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Mx3DPointFloat min;
|
Mx3DPointFloat min; // 0x00
|
||||||
Mx3DPointFloat max;
|
Mx3DPointFloat max; // 0x14
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -37,8 +37,8 @@ class BoundingSphere {
|
||||||
float& Radius() { return radius; }
|
float& Radius() { return radius; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Mx3DPointFloat center;
|
Mx3DPointFloat center; // 0x00
|
||||||
float radius;
|
float radius; // 0x14
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -79,43 +79,45 @@ class ROI {
|
||||||
public:
|
public:
|
||||||
ROI()
|
ROI()
|
||||||
{
|
{
|
||||||
m_comp = 0;
|
comp = 0;
|
||||||
m_lods = 0;
|
lods = 0;
|
||||||
m_unk0x0c = 1;
|
m_unk0x0c = 1;
|
||||||
}
|
}
|
||||||
virtual ~ROI()
|
virtual ~ROI()
|
||||||
{
|
{
|
||||||
// if derived class set the comp and lods, it should delete them
|
// if derived class set the comp and lods, it should delete them
|
||||||
assert(!m_comp);
|
assert(!comp);
|
||||||
assert(!m_lods);
|
assert(!lods);
|
||||||
}
|
}
|
||||||
virtual float IntrinsicImportance() const = 0; // vtable+0x04
|
virtual float IntrinsicImportance() const = 0; // vtable+0x04
|
||||||
virtual const float* GetWorldVelocity() const = 0; // vtable+0x08
|
virtual const float* GetWorldVelocity() const = 0; // vtable+0x08
|
||||||
virtual const BoundingBox& GetWorldBoundingBox() const = 0; // vtable+0x0c
|
virtual const BoundingBox& GetWorldBoundingBox() const = 0; // vtable+0x0c
|
||||||
virtual const BoundingSphere& GetWorldBoundingSphere() const = 0; // vtable+0x10
|
virtual const BoundingSphere& GetWorldBoundingSphere() const = 0; // vtable+0x10
|
||||||
|
|
||||||
const LODListBase* GetLODs() const { return m_lods; }
|
const LODListBase* GetLODs() const { return lods; }
|
||||||
const LODObject* GetLOD(int i) const
|
const LODObject* GetLOD(int i) const
|
||||||
{
|
{
|
||||||
assert(m_lods);
|
assert(lods);
|
||||||
return (*m_lods)[i];
|
return (*lods)[i];
|
||||||
}
|
}
|
||||||
int GetLODCount() const { return m_lods ? m_lods->Size() : 0; }
|
int GetLODCount() const { return lods ? lods->Size() : 0; }
|
||||||
const CompoundObject* GetComp() const { return m_comp; }
|
const CompoundObject* GetComp() const { return comp; }
|
||||||
|
|
||||||
inline undefined GetUnknown0x0c() { return m_unk0x0c; }
|
inline undefined GetUnknown0x0c() { return m_unk0x0c; }
|
||||||
|
|
||||||
inline void SetUnknown0x0c(undefined p_unk0x0c) { m_unk0x0c = p_unk0x0c; }
|
inline void SetUnknown0x0c(undefined p_unk0x0c) { m_unk0x0c = p_unk0x0c; }
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x100a5d60
|
// SYNTHETIC: LEGO1 0x100a5d60
|
||||||
// ROI::`scalar deleting destructor'
|
// ROI::`scalar deleting destructor'
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
CompoundObject* m_comp; // 0x04
|
CompoundObject* comp; // 0x04
|
||||||
LODListBase* m_lods; // 0x08
|
LODListBase* lods; // 0x08
|
||||||
undefined m_unk0x0c; // 0x0c
|
undefined m_unk0x0c; // 0x0c
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TEMPLATE: LEGO1 0x10084930
|
||||||
|
// list<ROI *,allocator<ROI *> >::~list<ROI *,allocator<ROI *> >
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x100a5d50
|
// SYNTHETIC: LEGO1 0x100a5d50
|
||||||
// ROI::~ROI
|
// ROI::~ROI
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ class ViewManager {
|
||||||
private:
|
private:
|
||||||
undefined4 m_unk0x04; // 0x04
|
undefined4 m_unk0x04; // 0x04
|
||||||
CompoundObject m_unk0x08; // 0x08
|
CompoundObject m_unk0x08; // 0x08
|
||||||
undefined m_pad[0x1c8]; // 0x14
|
undefined m_pad[0x1a8]; // 0x14
|
||||||
};
|
};
|
||||||
|
|
||||||
// TEMPLATE: LEGO1 0x10022030
|
// TEMPLATE: LEGO1 0x10022030
|
||||||
|
|
|
@ -21,12 +21,15 @@ class ViewROI : public OrientableROI {
|
||||||
SetLODList(lodList);
|
SetLODList(lodList);
|
||||||
geometry = pRenderer->CreateGroup();
|
geometry = pRenderer->CreateGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100a9e20
|
||||||
inline ~ViewROI() override
|
inline ~ViewROI() override
|
||||||
{
|
{
|
||||||
// SetLODList() will decrease refCount of LODList
|
// SetLODList() will decrease refCount of LODList
|
||||||
SetLODList(0);
|
SetLODList(0);
|
||||||
delete geometry;
|
delete geometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void SetLODList(ViewLODList* lodList)
|
inline void SetLODList(ViewLODList* lodList)
|
||||||
{
|
{
|
||||||
// ??? inherently type unsafe - kind of... because, now, ROI
|
// ??? inherently type unsafe - kind of... because, now, ROI
|
||||||
|
@ -34,16 +37,17 @@ class ViewROI : public OrientableROI {
|
||||||
// solution: create pure virtual LODListBase* ROI::GetLODList()
|
// solution: create pure virtual LODListBase* ROI::GetLODList()
|
||||||
// and let derived ROI classes hold the LODList
|
// and let derived ROI classes hold the LODList
|
||||||
|
|
||||||
if (m_lods) {
|
if (lods) {
|
||||||
reinterpret_cast<ViewLODList*>(m_lods)->Release();
|
reinterpret_cast<ViewLODList*>(lods)->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_lods = lodList;
|
lods = lodList;
|
||||||
|
|
||||||
if (m_lods) {
|
if (lods) {
|
||||||
reinterpret_cast<ViewLODList*>(m_lods)->AddRef();
|
reinterpret_cast<ViewLODList*>(lods)->AddRef();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float IntrinsicImportance() const override; // vtable+0x04
|
float IntrinsicImportance() const override; // vtable+0x04
|
||||||
void VTable0x1c() override; // vtable+0x1c
|
void VTable0x1c() override; // vtable+0x1c
|
||||||
void SetLocalTransform(const Matrix4& p_transform) override; // vtable+0x20
|
void SetLocalTransform(const Matrix4& p_transform) override; // vtable+0x20
|
||||||
|
@ -54,8 +58,9 @@ class ViewROI : public OrientableROI {
|
||||||
static undefined SetUnk101013d8(undefined p_flag);
|
static undefined SetUnk101013d8(undefined p_flag);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Tgl::Group* geometry;
|
|
||||||
void UpdateWorldData(const MxMatrix& parent2world) override;
|
void UpdateWorldData(const MxMatrix& parent2world) override;
|
||||||
|
|
||||||
|
Tgl::Group* geometry; // 0xdc
|
||||||
};
|
};
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x100aa250
|
// SYNTHETIC: LEGO1 0x100aa250
|
||||||
|
|
Loading…
Reference in a new issue