mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-24 08:54:15 +00:00
Implement/match LegoAnimActor (#730)
* Implement/match LegoAnimActor * Name changes (deviation from original source) * Attempt to fix modern build * Add missing override * Match LegoAnimActor::SetWorldSpeed * Remove junk * Style changes and implement WEEdge * Add override * Match LegoAnimActor::FUN_1001c1f0, style * Style * Add missing annotations, STUB LegoPathBoundary * Style --------- Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
@@ -14,7 +14,7 @@ public:
|
||||
BumpBouy();
|
||||
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
||||
|
||||
// FUNCTION: LEGO1 0x100274e0
|
||||
// FUNCTION: LEGO1 0x10027510
|
||||
inline const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f0394
|
||||
@@ -27,12 +27,7 @@ public:
|
||||
return !strcmp(p_name, BumpBouy::ClassName()) || LegoAnimActor::IsA(p_name);
|
||||
}
|
||||
|
||||
void ParseAction(char*) override; // vtable+0x20
|
||||
void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
|
||||
void VTable0x70(float p_float) override; // vtable+0x70
|
||||
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10027490
|
||||
// SYNTHETIC: LEGO1 0x100274a0
|
||||
// BumpBouy::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
|
||||
@@ -51,10 +51,10 @@ public:
|
||||
// FUNCTION: LEGO1 0x10002e00
|
||||
virtual MxU32 VTable0xdc(MxType19NotificationParam&) { return 0; } // vtable+0xdc
|
||||
|
||||
virtual void VTable0xe0(); // vtable+0xe0
|
||||
virtual void VTable0xe4(); // vtable+0xe4
|
||||
virtual void VTable0xe8(LegoGameState::Area, MxBool, MxU8); // vtable+0xe8
|
||||
virtual void VTable0xec(MxMatrix, MxU32, MxBool); // vtable+0xec
|
||||
virtual void VTable0xe0(); // vtable+0xe0
|
||||
virtual void VTable0xe4(); // vtable+0xe4
|
||||
virtual void VTable0xe8(LegoGameState::Area, MxBool, MxU8); // vtable+0xe8
|
||||
virtual void VTable0xec(MxMatrix, LegoPathBoundary*, MxBool); // vtable+0xec
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10002ff0
|
||||
// IslePathActor::`scalar deleting destructor'
|
||||
|
||||
@@ -1,42 +1,82 @@
|
||||
#ifndef LEGOANIMACTOR_H
|
||||
#define LEGOANIMACTOR_H
|
||||
|
||||
#include "anim/legoanim.h"
|
||||
#include "decomp.h"
|
||||
#include "legopathactor.h"
|
||||
|
||||
/*
|
||||
VTABLE: LEGO1 0x100d5440 LegoPathActor
|
||||
VTABLE: LEGO1 0x100d5510 LegoAnimActor
|
||||
*/
|
||||
// SIZE 0x20
|
||||
struct LegoAnimActorStruct {
|
||||
LegoAnimActorStruct(float p_unk0x00, LegoAnim* p_AnimTreePtr, LegoROI** p_roiMap, MxU32 p_numROIs);
|
||||
~LegoAnimActorStruct();
|
||||
|
||||
float GetDuration();
|
||||
|
||||
float m_unk0x00; // 0x00
|
||||
LegoAnim* m_AnimTreePtr; // 0x04
|
||||
LegoROI** m_roiMap; // 0x08
|
||||
MxU32 m_numROIs; // 0x0c
|
||||
vector<undefined*> m_unk0x10; // 0x10
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d5440 LegoPathActor
|
||||
// VTABLE: LEGO1 0x100d5510 LegoAnimActor
|
||||
// SIZE 0x174
|
||||
class LegoAnimActor : public virtual LegoPathActor {
|
||||
public:
|
||||
LegoAnimActor() { m_index = -1; }
|
||||
LegoAnimActor() { m_curAnim = -1; }
|
||||
~LegoAnimActor() override;
|
||||
|
||||
// FUNCTION: LEGO1 0x1000fb90
|
||||
// FUNCTION: LEGO1 0x1000fba0
|
||||
inline const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f057c
|
||||
return "LegoAnimActor";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000fbb0
|
||||
// FUNCTION: LEGO1 0x1000fbc0
|
||||
inline MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, LegoAnimActor::ClassName()) || LegoPathActor::IsA(p_name);
|
||||
}
|
||||
|
||||
virtual MxResult FUN_1001c1f0(float& p_out);
|
||||
virtual MxResult FUN_1001c360(float, undefined4);
|
||||
virtual MxResult FUN_1001c450(undefined4, undefined4, undefined4, undefined4);
|
||||
virtual void FUN_1001c800();
|
||||
void ParseAction(char* p_extra) override; // vtable+0x20
|
||||
void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
|
||||
void VTable0x70(float p_und) override; // vtable+0x70
|
||||
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000fb50
|
||||
virtual MxResult FUN_1001c1f0(float& p_und);
|
||||
virtual MxResult FUN_1001c360(float, Matrix4& p_transform);
|
||||
virtual MxResult FUN_1001c450(LegoAnim* p_AnimTreePtr, float p_unk0x00, LegoROI** p_roiMap, MxU32 p_numROIs);
|
||||
virtual void ClearMaps();
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000fb60
|
||||
// LegoAnimActor::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
vector<void*> m_unk0x08; // 0x08
|
||||
MxU16 m_index; // 0x18
|
||||
vector<LegoAnimActorStruct*> m_animMaps; // 0x08
|
||||
MxS16 m_curAnim; // 0x18
|
||||
};
|
||||
|
||||
// TEMPLATE: LEGO1 0x1000da60
|
||||
// Vector<LegoAnimActorStruct *>::~Vector<LegoAnimActorStruct *>
|
||||
|
||||
// TEMPLATE: LEGO1 0x1001c010
|
||||
// vector<unsigned char *,allocator<unsigned char *> >::~vector<unsigned char *,allocator<unsigned char *> >
|
||||
|
||||
// TEMPLATE: LEGO1 0x1001c050
|
||||
// Vector<unsigned char *>::~Vector<unsigned char *>
|
||||
|
||||
// TEMPLATE: LEGO1 0x1001c7c0
|
||||
// vector<LegoAnimActorStruct *,allocator<LegoAnimActorStruct *> >::size
|
||||
|
||||
// TEMPLATE: LEGO1 0x1001c7e0
|
||||
// vector<LegoAnimActorStruct *,allocator<LegoAnimActorStruct *> >::_Destroy
|
||||
|
||||
// TEMPLATE: LEGO1 0x1001c9e0
|
||||
// uninitialized_fill_n
|
||||
|
||||
// TEMPLATE: LEGO1 0x1001ca10
|
||||
// uninitialized_copy
|
||||
|
||||
#endif // LEGOANIMACTOR_H
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
class LegoWorld;
|
||||
class LegoAnimClass;
|
||||
class LegoAnimActor;
|
||||
|
||||
// VTABLE: LEGO1 0x100d90c8
|
||||
// SIZE 0xbc
|
||||
@@ -54,6 +55,8 @@ public:
|
||||
|
||||
virtual void VTable0xa0(); // vtable+0xa0
|
||||
|
||||
void FUN_1006d680(LegoAnimActor* p_actor, MxFloat p_value);
|
||||
|
||||
inline LegoAnim* GetAnimation() { return m_anim; }
|
||||
|
||||
const char* GetActionObjectName();
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define LEGOPATHACTOR_H
|
||||
|
||||
#include "legoactor.h"
|
||||
#include "legopathboundary.h"
|
||||
#include "mxtypes.h"
|
||||
#include "realtime/matrix.h"
|
||||
|
||||
@@ -34,10 +35,10 @@ public:
|
||||
virtual void VTable0x74(Matrix4& p_transform); // vtable+0x74
|
||||
|
||||
// FUNCTION: LEGO1 0x10002d20
|
||||
virtual void VTable0x78(MxU8 p_unk0xea) { m_unk0xea = p_unk0xea; } // vtable+0x78
|
||||
virtual void SetUserNavFlag(MxBool p_userNavFlag) { m_userNavFlag = p_userNavFlag; } // vtable+0x78
|
||||
|
||||
// FUNCTION: LEGO1 0x10002d30
|
||||
virtual MxU8 VTable0x7c() { return m_unk0xea; } // vtable+0x7c
|
||||
virtual MxU8 GetUserNavFlag() { return m_userNavFlag; } // vtable+0x7c
|
||||
|
||||
virtual void VTable0x80(); // vtable+0x80
|
||||
virtual void VTable0x84(); // vtable+0x84
|
||||
@@ -83,10 +84,10 @@ public:
|
||||
// FUNCTION: LEGO1 0x10002de0
|
||||
virtual void VTable0xc8(MxU8 p_unk0x148) { m_unk0x148 = p_unk0x148; } // vtable+0xc8
|
||||
|
||||
inline MxU32 GetUnknown88() { return m_unk0x88; }
|
||||
inline LegoPathBoundary* GetBoundary() { return m_boundary; }
|
||||
inline LegoPathController* GetController() { return m_controller; }
|
||||
|
||||
inline void SetUnknown88(MxU32 p_unk0x88) { m_unk0x88 = p_unk0x88; }
|
||||
inline void SetBoundary(LegoPathBoundary* p_boundary) { m_boundary = p_boundary; }
|
||||
inline void SetUnknownDC(MxU32 p_unk0xdc) { m_unk0xdc = p_unk0xdc; }
|
||||
inline void ClearController() { m_controller = NULL; }
|
||||
|
||||
@@ -94,18 +95,21 @@ public:
|
||||
// LegoPathActor::`scalar deleting destructor'
|
||||
|
||||
protected:
|
||||
undefined m_unk0x78[0xa]; // 0x78
|
||||
MxBool m_userNavFlag; // 0x82
|
||||
undefined4 m_unk0x84; // 0x84
|
||||
MxU32 m_unk0x88; // 0x88
|
||||
undefined4 m_boundary; // 0x8c
|
||||
undefined m_unk0x8c[0x4c]; // 0x90
|
||||
MxFloat m_BADuration; // 0x78
|
||||
undefined4 m_unk0x7c; // 0x7c
|
||||
MxFloat m_unk0x80; // 0x80
|
||||
MxFloat m_unk0x84; // 0x84
|
||||
LegoPathBoundary* m_boundary; // 0x88
|
||||
undefined m_unk0x8c[0x14]; // 0x8c
|
||||
MxFloat m_unk0xa0; // 0xa0
|
||||
undefined m_unk0xa4[0x38]; // 0xa4
|
||||
MxU32 m_unk0xdc; // 0xdc
|
||||
undefined4 m_unk0xe0; // 0xe0
|
||||
undefined4 m_destEdge; // 0xe4
|
||||
undefined4 m_destEdge; // 0xe0
|
||||
undefined4 m_unk0xe4; // 0xe4
|
||||
undefined2 m_unk0xe8; // 0xe8
|
||||
MxU8 m_unk0xea; // 0xea
|
||||
undefined m_unk0xef[0x4d]; // 0xef
|
||||
MxBool m_userNavFlag; // 0xea
|
||||
MxMatrix m_unk0xec; // 0xec
|
||||
undefined4 m_unk0x134; // 0x134
|
||||
LegoPathController* m_controller; // 0x138
|
||||
MxFloat m_unk0x13c; // 0x13c
|
||||
MxFloat m_unk0x140; // 0x140
|
||||
|
||||
@@ -1,6 +1,26 @@
|
||||
#ifndef LEGOPATHBOUNDARH_H
|
||||
#define LEGOPATHBOUNDARH_H
|
||||
#ifndef LEGOPATHBOUNDARY_H
|
||||
#define LEGOPATHBOUNDARY_H
|
||||
|
||||
class LegoPathBoundary {};
|
||||
#include "geom/legowegedge.h"
|
||||
#include "mxstl/stlcompat.h"
|
||||
#include "mxtypes.h"
|
||||
|
||||
#endif // LEGOPATHBOUNDARH_H
|
||||
struct LegoPathBoundaryComparator {
|
||||
MxBool operator()(const undefined*, const undefined*) const { return 0; }
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d8618
|
||||
// SIZE 0x74
|
||||
class LegoPathBoundary : public LegoWEGEdge {
|
||||
public:
|
||||
LegoPathBoundary();
|
||||
|
||||
// STUB: LEGO1 0x10047a80
|
||||
// LegoPathBoundary::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
map<undefined*, undefined*, LegoPathBoundaryComparator> m_unk0x54; // 0x54
|
||||
map<undefined*, undefined*, LegoPathBoundaryComparator> m_unk0x64; // 0x64
|
||||
};
|
||||
|
||||
#endif // LEGOPATHBOUNDARY_H
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
class LegoPathBoundary;
|
||||
class LegoWorld;
|
||||
|
||||
struct LegoPathControllerComparator {
|
||||
MxBool operator()(const undefined*, const undefined*) const { return 0; }
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d7d60
|
||||
// SIZE 0x40
|
||||
class LegoPathController : public MxCore {
|
||||
@@ -42,17 +46,16 @@ public:
|
||||
void FUN_10046bb0(LegoWorld* p_world);
|
||||
|
||||
private:
|
||||
undefined4 m_unk0x08; // 0x08
|
||||
undefined4 m_unk0x0c; // 0x0c
|
||||
undefined4 m_unk0x10; // 0x10
|
||||
undefined4 m_unk0x14; // 0x14
|
||||
undefined2 m_unk0x18; // 0x18
|
||||
undefined2 m_unk0x1a; // 0x1a
|
||||
undefined2 m_unk0x1c; // 0x1c
|
||||
undefined2 m_unk0x1e; // 0x1e
|
||||
// These 2 are some sort of template class
|
||||
undefined m_unk0x20[0x10]; // 0x20
|
||||
undefined m_unk0x30[0x10]; // 0x30
|
||||
LegoPathBoundary* m_unk0x08; // 0x08
|
||||
undefined4 m_unk0x0c; // 0x0c
|
||||
undefined4 m_unk0x10; // 0x10
|
||||
undefined4 m_unk0x14; // 0x14
|
||||
MxS16 m_numL; // 0x18
|
||||
MxS16 m_numE; // 0x1a
|
||||
MxS16 m_numN; // 0x1c
|
||||
MxS16 m_numT; // 0x1e
|
||||
map<undefined*, undefined*, LegoPathControllerComparator> m_pfsE; // 0x20
|
||||
map<undefined*, undefined*, LegoPathControllerComparator> m_unk0x30; // 0x30
|
||||
};
|
||||
|
||||
#endif // LEGOPATHCONTROLLER_H
|
||||
|
||||
Reference in New Issue
Block a user