Implement/match LegoAnimationManager::AddExtra (#901)

* Implement/match LegoAnimationManager::AddExtra

* Rename member

* Fix param names

* Remove space
This commit is contained in:
Christian Semmler
2024-05-10 14:07:38 -04:00
committed by GitHub
parent a1388adcd7
commit d9a82323ca
20 changed files with 522 additions and 226 deletions

View File

@@ -3,6 +3,7 @@
#include "actionsfwd.h"
#include "decomp.h"
#include "legolocations.h"
#include "legotraninfolist.h"
#include "mxcore.h"
#include "mxgeometry/mxgeometry3d.h"
@@ -10,9 +11,11 @@
class AnimState;
class LegoAnimPresenter;
class LegoEntity;
class LegoExtraActor;
class LegoFile;
class LegoPathBoundary;
class LegoROIList;
class LegoWorld;
struct ModelInfo;
class MxDSAction;
@@ -38,9 +41,9 @@ public:
// SIZE 0x08
struct Vehicle {
char* m_name; // 0x00
undefined m_unk0x04; // 0x04
MxBool m_unk0x05; // 0x05
char* m_name; // 0x00
MxBool m_unk0x04; // 0x04
MxBool m_unk0x05; // 0x05
};
// SIZE 0x18
@@ -99,7 +102,7 @@ public:
LegoTranInfo* GetTranInfo(MxU32 p_index);
void FUN_10062770();
void PurgeExtra(MxBool p_und);
void AddExtra(MxU32 p_cameraLocation, MxBool p_und);
void AddExtra(MxS32 p_location, MxBool p_und);
void FUN_10063270(LegoROIList*, LegoAnimPresenter*);
void FUN_10063780(LegoROIList* p_list);
void FUN_10064670(Vector3*);
@@ -143,7 +146,10 @@ private:
MxBool FUN_10062650(Vector3& p_position, float p_und, LegoROI* p_roi);
MxBool FUN_10062710(AnimInfo& p_info);
void FUN_10063aa0();
MxBool FUN_10063b90(LegoWorld* p_world, LegoExtraActor* p_actor, MxU8 p_unk0x14, MxU32 p_characterId);
void FUN_10063d10();
MxBool FUN_10063fb0(LegoLocation::Boundary* p_boundary, LegoWorld* p_world);
MxBool FUN_10064120(LegoLocation::Boundary* p_boundary, MxBool, MxBool);
void FUN_100648f0(LegoTranInfo*, MxLong);
void FUN_10064b50(MxLong p_time);
@@ -163,7 +169,7 @@ private:
MxBool m_unk0x39; // 0x39
MxBool m_unk0x3a; // 0x3a
Extra m_extras[40]; // 0x3c
undefined4 m_unk0x3fc; // 0x3fc
MxU32 m_lastExtraCharacterId; // 0x3fc
MxBool m_unk0x400; // 0x400
MxBool m_unk0x401; // 0x401
MxBool m_unk0x402; // 0x402
@@ -171,7 +177,7 @@ private:
MxLong m_unk0x408; // 0x408
MxLong m_unk0x40c; // 0x40c
MxLong m_unk0x410; // 0x410
MxLong m_unk0x414; // 0x414
MxU32 m_unk0x414; // 0x414
MxU32 m_numAllowedExtras; // 0x418
undefined4 m_unk0x41c; // 0x41c
AnimState* m_animState; // 0x420

View File

@@ -1,31 +0,0 @@
#ifndef LEGOCAMERALOCATIONS_H
#define LEGOCAMERALOCATIONS_H
#include "decomp.h"
#include "mxtypes.h"
// SIZE 0x60
struct LegoCameraLocation {
// SIZE 0x18
struct Path {
const char* m_name; // 0x00
MxS32 m_src; // 0x04
float m_srcScale; // 0x08
MxS32 m_dest; // 0x0c
float m_destScale; // 0x10
undefined4 m_unk0x10; // 0x14
};
MxU32 m_index; // 0x00
const char* m_name; // 0x04
float m_position[3]; // 0x08
float m_direction[3]; // 0x14
float m_up[3]; // 0x20
Path m_pathA; // 0x2c
Path m_pathB; // 0x44
undefined4 m_unk0x5c; // 0x5c
};
extern LegoCameraLocation g_cameraLocations[70];
#endif // LEGOCAMERALOCATIONS_H

View File

@@ -59,6 +59,7 @@ public:
static MxBool Exists(const char* p_key);
void FUN_100832a0();
MxBool FUN_10083b20(const char* p_name);
MxU32 GetRefCount(LegoROI* p_roi);
void FUN_10083c30(const char* p_name);
void FUN_10083db0(LegoROI* p_roi);
@@ -69,6 +70,7 @@ public:
LegoCharacterInfo* GetInfo(LegoROI* p_roi);
MxBool SwitchHat(LegoROI* p_roi);
MxU32 FUN_10085140(LegoROI* p_roi, MxBool p_und);
MxU8 FUN_10085180(LegoROI* p_roi);
LegoROI* FUN_10085210(const char* p_name, const char* p_lodName, MxBool p_createEntity);
LegoROI* FUN_10085a80(const char* p_name, const char* p_lodName, MxBool p_createEntity);

View File

@@ -49,11 +49,13 @@ public:
MxResult WaitForAnimation() override; // vtable+0x9c
void VTable0xa4(MxU8& p_und1, MxS32& p_und2) override; // vtable+0xa4
void VTable0xc4() override; // vtable+0xc4
virtual MxResult VTable0xc8(); // vtable+0xc8
virtual MxResult FUN_1002aae0();
void Restart();
inline void FUN_1002ad8a();
inline void SetUnknown0x0c(undefined p_unk0x0c) { m_unk0x0c = p_unk0x0c; }
// SYNTHETIC: LEGO1 0x1002b760
// LegoExtraActor::`scalar deleting destructor'

View File

@@ -0,0 +1,31 @@
#ifndef LEGOLOCATIONS_H
#define LEGOLOCATIONS_H
#include "decomp.h"
#include "mxtypes.h"
// SIZE 0x60
struct LegoLocation {
// SIZE 0x18
struct Boundary {
const char* m_name; // 0x00
MxS32 m_src; // 0x04
float m_srcScale; // 0x08
MxS32 m_dest; // 0x0c
float m_destScale; // 0x10
MxBool m_unk0x10; // 0x14
};
MxU32 m_index; // 0x00
const char* m_name; // 0x04
float m_position[3]; // 0x08
float m_direction[3]; // 0x14
float m_up[3]; // 0x20
Boundary m_boundaryA; // 0x2c
Boundary m_boundaryB; // 0x44
undefined4 m_unk0x5c; // 0x5c
};
extern LegoLocation g_locations[70];
#endif // LEGOLOCATIONS_H

View File

@@ -5,7 +5,7 @@
#include "mxcore.h"
#include "mxtypes.h"
struct LegoCameraLocation;
struct LegoLocation;
class Vector3;
//////////////////////////////////////////////////////////////////////////////
@@ -72,9 +72,9 @@ public:
float p_rs,
MxBool p_urs
);
static MxResult UpdateCameraLocation(MxU32 p_location);
static MxResult UpdateCameraLocation(const char* p_location);
static LegoCameraLocation* GetCameraLocation(MxU32 p_location);
static MxResult UpdateLocation(MxU32 p_location);
static MxResult UpdateLocation(const char* p_location);
static LegoLocation* GetLocation(MxU32 p_location);
inline void SetLinearVel(MxFloat p_linearVel) { m_linearVel = p_linearVel; }
inline MxFloat GetLinearVel() { return m_linearVel; }

View File

@@ -46,7 +46,7 @@ public:
MxResult FUN_10045c20(
LegoPathActor* p_actor,
const char* p_path,
const char* p_name,
MxS32 p_src,
float p_srcScale,
MxS32 p_dest,

View File

@@ -65,9 +65,9 @@ public:
MxBool PresentersPending();
void Remove(MxCore* p_object);
MxResult FUN_1001f720(
IslePathActor* p_actor,
const char* p_path,
MxResult PlaceActor(
LegoPathActor* p_actor,
const char* p_name,
MxS32 p_src,
float p_srcScale,
MxS32 p_dest,