mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-23 08:24:16 +00:00
Progress on LegoCarBuildAnimPresenter
(#1103)
* Progress on `LegoCarBuildAnimPresenter` * Rename argument * fix copy-paste error * Address review comments * Remove obsolete comment --------- Co-authored-by: jonschz <jonschz@users.noreply.github.com>
This commit is contained in:
@@ -30,6 +30,7 @@ typedef map<const char*, LegoAnimStruct, LegoAnimStructComparator> LegoAnimStruc
|
|||||||
typedef map<const char*, const char*, LegoAnimSubstComparator> LegoAnimSubstMap;
|
typedef map<const char*, const char*, LegoAnimSubstComparator> LegoAnimSubstMap;
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100d90c8
|
// VTABLE: LEGO1 0x100d90c8
|
||||||
|
// VTABLE: BETA10 0x101baf90
|
||||||
// SIZE 0xbc
|
// SIZE 0xbc
|
||||||
class LegoAnimPresenter : public MxVideoPresenter {
|
class LegoAnimPresenter : public MxVideoPresenter {
|
||||||
public:
|
public:
|
||||||
|
@@ -5,9 +5,17 @@
|
|||||||
#include "legoanimpresenter.h"
|
#include "legoanimpresenter.h"
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100d99e0
|
// VTABLE: LEGO1 0x100d99e0
|
||||||
|
// VTABLE: BETA10 0x101bb988
|
||||||
// SIZE 0x150
|
// SIZE 0x150
|
||||||
class LegoCarBuildAnimPresenter : public LegoAnimPresenter {
|
class LegoCarBuildAnimPresenter : public LegoAnimPresenter {
|
||||||
public:
|
public:
|
||||||
|
// SIZE 0x0c
|
||||||
|
struct UnknownListEntry {
|
||||||
|
LegoChar* m_unk0x00; // 0x00
|
||||||
|
LegoChar* m_unk0x04; // 0x04
|
||||||
|
undefined m_unk0x08[4]; // 0x08
|
||||||
|
};
|
||||||
|
|
||||||
LegoCarBuildAnimPresenter();
|
LegoCarBuildAnimPresenter();
|
||||||
~LegoCarBuildAnimPresenter() override; // vtable+0x00
|
~LegoCarBuildAnimPresenter() override; // vtable+0x00
|
||||||
|
|
||||||
@@ -39,27 +47,35 @@ public:
|
|||||||
|
|
||||||
void FUN_10079920(float p_param1);
|
void FUN_10079920(float p_param1);
|
||||||
MxBool FUN_10079ca0(const char* p_param1);
|
MxBool FUN_10079ca0(const char* p_param1);
|
||||||
|
MxBool FUN_10079cf0(const LegoChar* p_name);
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x10070180
|
||||||
|
void SetUnknown0xbc(undefined2 p_unk0xbc) { m_unk0xbc = p_unk0xbc; }
|
||||||
|
|
||||||
|
MxBool StringEndsOnYOrN(const LegoChar* p_string);
|
||||||
|
|
||||||
|
const BoundingSphere& FUN_10079e20();
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x10078660
|
// SYNTHETIC: LEGO1 0x10078660
|
||||||
// LegoCarBuildAnimPresenter::`scalar deleting destructor'
|
// LegoCarBuildAnimPresenter::`scalar deleting destructor'
|
||||||
|
|
||||||
private:
|
private:
|
||||||
undefined2 m_unk0xbc; // 0xbc
|
undefined2 m_unk0xbc; // 0xbc
|
||||||
undefined2 m_unk0xbe; // 0xbe
|
MxS16 m_unk0xbe; // 0xbe
|
||||||
undefined2 m_unk0xc0; // 0xc0
|
MxS16 m_unk0xc0; // 0xc0
|
||||||
undefined4 m_unk0xc4; // 0xc4
|
undefined4 m_unk0xc4; // 0xc4
|
||||||
LegoAnim m_unk0xc8; // 0xc8
|
LegoAnim m_unk0xc8; // 0xc8
|
||||||
MxMatrix m_unk0xe0; // 0xe0
|
MxMatrix m_unk0xe0; // 0xe0
|
||||||
undefined4 m_unk0x128; // 0x128
|
UnknownListEntry* m_unk0x128; // 0x128
|
||||||
undefined4 m_unk0x12c; // 0x12c
|
undefined4 m_unk0x12c; // 0x12c
|
||||||
undefined4 m_unk0x130; // 0x130
|
undefined4 m_unk0x130; // 0x130
|
||||||
undefined4 m_unk0x134; // 0x134
|
undefined4 m_unk0x134; // 0x134
|
||||||
undefined4 m_unk0x138; // 0x138
|
undefined4 m_unk0x138; // 0x138
|
||||||
undefined4 m_unk0x13c; // 0x13c
|
undefined4 m_unk0x13c; // 0x13c
|
||||||
undefined4 m_unk0x140; // 0x140
|
LegoEntity* m_unk0x140; // 0x140
|
||||||
MxS32 m_unk0x144; // 0x144
|
MxS32 m_unk0x144; // 0x144
|
||||||
MxS32 m_unk0x148; // 0x148
|
MxS32 m_unk0x148; // 0x148
|
||||||
undefined4 m_unk0x14c; // 0x14c
|
undefined* m_unk0x14c; // 0x14c
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LEGOCARBUILDPRESENTER_H
|
#endif // LEGOCARBUILDPRESENTER_H
|
||||||
|
@@ -1,23 +1,55 @@
|
|||||||
#include "legocarbuildpresenter.h"
|
#include "legocarbuildpresenter.h"
|
||||||
|
|
||||||
|
#include "legoentity.h"
|
||||||
|
#include "mxautolock.h"
|
||||||
|
|
||||||
|
DECOMP_SIZE_ASSERT(LegoCarBuildAnimPresenter::UnknownListEntry, 0x0c)
|
||||||
DECOMP_SIZE_ASSERT(LegoCarBuildAnimPresenter, 0x150)
|
DECOMP_SIZE_ASSERT(LegoCarBuildAnimPresenter, 0x150)
|
||||||
|
|
||||||
// STUB: LEGO1 0x10078400
|
// FUNCTION: LEGO1 0x10078400
|
||||||
|
// FUNCTION: BETA10 0x100707c0
|
||||||
LegoCarBuildAnimPresenter::LegoCarBuildAnimPresenter()
|
LegoCarBuildAnimPresenter::LegoCarBuildAnimPresenter()
|
||||||
{
|
{
|
||||||
// TODO
|
m_unk0xbc = 0;
|
||||||
|
m_unk0xbe = 0;
|
||||||
|
m_unk0xc0 = 0;
|
||||||
|
m_unk0x128 = NULL;
|
||||||
|
m_unk0xc4 = 0;
|
||||||
|
m_unk0x130 = 0;
|
||||||
|
m_unk0x12c = 0;
|
||||||
|
m_unk0x134 = 0;
|
||||||
|
m_unk0x138 = 0;
|
||||||
|
m_unk0x13c = 0;
|
||||||
|
m_unk0x140 = NULL;
|
||||||
|
m_unk0x144 = -1;
|
||||||
|
m_unk0x148 = -1;
|
||||||
|
m_unk0x14c = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10078500
|
// FUNCTION: LEGO1 0x10078500
|
||||||
void LegoCarBuildAnimPresenter::RepeatingTickle()
|
void LegoCarBuildAnimPresenter::RepeatingTickle()
|
||||||
{
|
{
|
||||||
// TODO
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10078680
|
// FUNCTION: LEGO1 0x10078680
|
||||||
|
// FUNCTION: BETA10 0x1007091e
|
||||||
LegoCarBuildAnimPresenter::~LegoCarBuildAnimPresenter()
|
LegoCarBuildAnimPresenter::~LegoCarBuildAnimPresenter()
|
||||||
{
|
{
|
||||||
// TODO
|
if (m_unk0x128) {
|
||||||
|
for (MxS16 i = 0; i < m_unk0xbe; i++) {
|
||||||
|
delete m_unk0x128[i].m_unk0x00;
|
||||||
|
delete m_unk0x128[i].m_unk0x04;
|
||||||
|
}
|
||||||
|
delete[] m_unk0x128;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_unk0xc8.GetRoot()->SetNumChildren(0);
|
||||||
|
*m_unk0xc8.GetRoot()->GetChildren() = NULL;
|
||||||
|
|
||||||
|
if (m_unk0x14c) {
|
||||||
|
delete m_unk0x14c;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10078790
|
// STUB: LEGO1 0x10078790
|
||||||
@@ -27,21 +59,28 @@ void LegoCarBuildAnimPresenter::PutFrame()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100788c0
|
// STUB: LEGO1 0x100788c0
|
||||||
|
// STUB: BETA10 0x10070b56
|
||||||
void LegoCarBuildAnimPresenter::ReadyTickle()
|
void LegoCarBuildAnimPresenter::ReadyTickle()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100789e0
|
// STUB: LEGO1 0x100789e0
|
||||||
|
// STUB: BETA10 0x10070cdd
|
||||||
void LegoCarBuildAnimPresenter::StreamingTickle()
|
void LegoCarBuildAnimPresenter::StreamingTickle()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10078db0
|
// FUNCTION: LEGO1 0x10078db0
|
||||||
|
// FUNCTION: BETA10 0x100712f3
|
||||||
void LegoCarBuildAnimPresenter::EndAction()
|
void LegoCarBuildAnimPresenter::EndAction()
|
||||||
{
|
{
|
||||||
// TODO
|
if (m_action) {
|
||||||
|
AUTOLOCK(m_criticalSection);
|
||||||
|
MxVideoPresenter::EndAction();
|
||||||
|
m_unk0xbc = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10079920
|
// STUB: LEGO1 0x10079920
|
||||||
@@ -51,10 +90,37 @@ void LegoCarBuildAnimPresenter::FUN_10079920(float p_param1)
|
|||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10079ca0
|
// FUNCTION: LEGO1 0x10079b80
|
||||||
// STUB: BETA10 0x10072740
|
// FUNCTION: BETA10 0x1007258f
|
||||||
|
MxBool LegoCarBuildAnimPresenter::StringEndsOnYOrN(const LegoChar* p_string)
|
||||||
|
{
|
||||||
|
return (p_string[strlen(p_string) - 2] == 'N') || (p_string[strlen(p_string) - 2] == 'n') ||
|
||||||
|
(p_string[strlen(p_string) - 2] == 'Y') || (p_string[strlen(p_string) - 2] == 'y');
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x10079ca0
|
||||||
|
// FUNCTION: BETA10 0x10072740
|
||||||
MxBool LegoCarBuildAnimPresenter::FUN_10079ca0(const char* p_param1)
|
MxBool LegoCarBuildAnimPresenter::FUN_10079ca0(const char* p_param1)
|
||||||
{
|
{
|
||||||
// TODO; pretty short
|
for (MxS16 i = 0; i < m_unk0xc0; i++) {
|
||||||
|
if (strcmpi(p_param1, m_unk0x128[i].m_unk0x00) == 0) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x10079cf0
|
||||||
|
// FUNCTION: BETA10 0x100727b3
|
||||||
|
MxBool LegoCarBuildAnimPresenter::FUN_10079cf0(const LegoChar* p_string)
|
||||||
|
{
|
||||||
|
return (p_string[strlen(p_string) - 2] == 'Y') || (p_string[strlen(p_string) - 2] == 'y');
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x10079e20
|
||||||
|
const BoundingSphere& LegoCarBuildAnimPresenter::FUN_10079e20()
|
||||||
|
{
|
||||||
|
LegoROI* roi = m_unk0x140->GetROI();
|
||||||
|
return roi->FindChildROI(m_unk0x128[m_unk0xc0].m_unk0x04, roi)->GetWorldBoundingSphere();
|
||||||
|
}
|
||||||
|
@@ -29,6 +29,7 @@
|
|||||||
DECOMP_SIZE_ASSERT(LegoAnimPresenter, 0xbc)
|
DECOMP_SIZE_ASSERT(LegoAnimPresenter, 0xbc)
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10068420
|
// FUNCTION: LEGO1 0x10068420
|
||||||
|
// FUNCTION: BETA10 0x1004e5f0
|
||||||
LegoAnimPresenter::LegoAnimPresenter()
|
LegoAnimPresenter::LegoAnimPresenter()
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
|
@@ -35,10 +35,16 @@ public:
|
|||||||
LegoTreeNodeData* GetData() { return m_data; }
|
LegoTreeNodeData* GetData() { return m_data; }
|
||||||
void SetData(LegoTreeNodeData* p_data) { m_data = p_data; }
|
void SetData(LegoTreeNodeData* p_data) { m_data = p_data; }
|
||||||
LegoU32 GetNumChildren() { return m_numChildren; }
|
LegoU32 GetNumChildren() { return m_numChildren; }
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x10073370
|
||||||
void SetNumChildren(LegoU32 p_numChildren) { m_numChildren = p_numChildren; }
|
void SetNumChildren(LegoU32 p_numChildren) { m_numChildren = p_numChildren; }
|
||||||
|
|
||||||
LegoTreeNode* GetChild(LegoU32 p_i) { return m_children[p_i]; }
|
LegoTreeNode* GetChild(LegoU32 p_i) { return m_children[p_i]; }
|
||||||
void SetChild(LegoU32 p_i, LegoTreeNode* p_child) { m_children[p_i] = p_child; }
|
void SetChild(LegoU32 p_i, LegoTreeNode* p_child) { m_children[p_i] = p_child; }
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x100733a0
|
||||||
LegoTreeNode** GetChildren() { return m_children; }
|
LegoTreeNode** GetChildren() { return m_children; }
|
||||||
|
|
||||||
void SetChildren(LegoTreeNode** p_children) { m_children = p_children; }
|
void SetChildren(LegoTreeNode** p_children) { m_children = p_children; }
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x10099d80
|
// SYNTHETIC: LEGO1 0x10099d80
|
||||||
@@ -56,7 +62,10 @@ class LegoTree {
|
|||||||
public:
|
public:
|
||||||
LegoTree();
|
LegoTree();
|
||||||
virtual ~LegoTree();
|
virtual ~LegoTree();
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x100121b0
|
||||||
LegoTreeNode* GetRoot() { return m_root; }
|
LegoTreeNode* GetRoot() { return m_root; }
|
||||||
|
|
||||||
void SetRoot(LegoTreeNode* p_root) { m_root = p_root; }
|
void SetRoot(LegoTreeNode* p_root) { m_root = p_root; }
|
||||||
virtual LegoResult Read(LegoStorage* p_storage); // vtable+0x04
|
virtual LegoResult Read(LegoStorage* p_storage); // vtable+0x04
|
||||||
virtual LegoResult Write(LegoStorage* p_storage); // vtable+0x08
|
virtual LegoResult Write(LegoStorage* p_storage); // vtable+0x08
|
||||||
|
@@ -675,4 +675,31 @@
|
|||||||
// LIBRARY: BETA10 0x100f9a50
|
// LIBRARY: BETA10 0x100f9a50
|
||||||
// _sin
|
// _sin
|
||||||
|
|
||||||
|
// LIBRARY: BETA10 0x100f95d0
|
||||||
|
// _sqrt
|
||||||
|
|
||||||
|
// LIBRARY: BETA10 0x100f9780
|
||||||
|
// strlen
|
||||||
|
|
||||||
|
// LIBRARY: BETA10 0x100f8a88
|
||||||
|
// operator new
|
||||||
|
|
||||||
|
// LIBRARY: BETA10 0x100f9420
|
||||||
|
// memcpy
|
||||||
|
|
||||||
|
// LIBRARY: BETA10 0x100fb080
|
||||||
|
// _stricmp
|
||||||
|
|
||||||
|
// LIBRARY: BETA10 0x100fb050
|
||||||
|
// fopen
|
||||||
|
|
||||||
|
// LIBRARY: BETA10 0x100fae70
|
||||||
|
// fprintf
|
||||||
|
|
||||||
|
// LIBRARY: BETA10 0x100fad10
|
||||||
|
// fclose
|
||||||
|
|
||||||
|
// LIBRARY: BETA10 0x100fe5a0
|
||||||
|
// abort
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -52,6 +52,7 @@ public:
|
|||||||
// FUNCTION: LEGO1 0x10048290
|
// FUNCTION: LEGO1 0x10048290
|
||||||
Mx4DPointFloat() : Vector4(m_elements) {}
|
Mx4DPointFloat() : Vector4(m_elements) {}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x10073bb0
|
||||||
Mx4DPointFloat(float p_x, float p_y, float p_z, float p_a) : Vector4(m_elements)
|
Mx4DPointFloat(float p_x, float p_y, float p_z, float p_a) : Vector4(m_elements)
|
||||||
{
|
{
|
||||||
m_elements[0] = p_x;
|
m_elements[0] = p_x;
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
#include "mxcriticalsection.h"
|
#include "mxcriticalsection.h"
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100b8ed0
|
// FUNCTION: LEGO1 0x100b8ed0
|
||||||
|
// FUNCTION: BETA10 0x101386f0
|
||||||
MxAutoLock::MxAutoLock(MxCriticalSection* p_criticalSection)
|
MxAutoLock::MxAutoLock(MxCriticalSection* p_criticalSection)
|
||||||
{
|
{
|
||||||
m_criticalSection = p_criticalSection;
|
m_criticalSection = p_criticalSection;
|
||||||
@@ -13,6 +14,7 @@ MxAutoLock::MxAutoLock(MxCriticalSection* p_criticalSection)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100b8ef0
|
// FUNCTION: LEGO1 0x100b8ef0
|
||||||
|
// FUNCTION: BETA10 0x10138744
|
||||||
MxAutoLock::~MxAutoLock()
|
MxAutoLock::~MxAutoLock()
|
||||||
{
|
{
|
||||||
if (m_criticalSection != NULL) {
|
if (m_criticalSection != NULL) {
|
||||||
|
@@ -36,6 +36,7 @@ MxCriticalSection::~MxCriticalSection()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100b6d80
|
// FUNCTION: LEGO1 0x100b6d80
|
||||||
|
// FUNCTION: BETA10 0x1013c725
|
||||||
void MxCriticalSection::Enter()
|
void MxCriticalSection::Enter()
|
||||||
{
|
{
|
||||||
DWORD result;
|
DWORD result;
|
||||||
|
@@ -542,6 +542,7 @@ MxResult MxVideoPresenter::AddToManager()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100b31d0
|
// FUNCTION: LEGO1 0x100b31d0
|
||||||
|
// FUNCTION: BETA10 0x101396d9
|
||||||
void MxVideoPresenter::EndAction()
|
void MxVideoPresenter::EndAction()
|
||||||
{
|
{
|
||||||
if (m_action) {
|
if (m_action) {
|
||||||
|
Reference in New Issue
Block a user