Improve LegoExtraActor::VTable0x90

This commit is contained in:
Christian Semmler 2024-03-27 15:23:51 -04:00
parent b4baed1cd0
commit 4bf26d935f
8 changed files with 48 additions and 36 deletions

View File

@ -27,12 +27,12 @@ class LegoCarRaceActor : public virtual LegoRaceActor {
return !strcmp(p_name, LegoCarRaceActor::ClassName()) || LegoRaceActor::IsA(p_name);
}
void VTable0x6c() override; // vtable+0x6c
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0x90(float, MxMatrix&) override; // vtable+0x90
MxS32 VTable0x94() override; // vtable+0x94
void VTable0x98() override; // vtable+0x98
void VTable0x9c() override; // vtable+0x9c
void VTable0x6c() override; // vtable+0x6c
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0x90(float, Matrix4&) override; // vtable+0x90
MxS32 VTable0x94() override; // vtable+0x94
void VTable0x98() override; // vtable+0x98
void VTable0x9c() override; // vtable+0x9c
virtual void FUN_10080590();

View File

@ -34,15 +34,15 @@ class LegoExtraActor : public virtual LegoAnimActor {
void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
void VTable0x68(Mx3DPointFloat& p_point1, Mx3DPointFloat& p_point2, Mx3DPointFloat& p_point3)
override; // vtable+0x68
void VTable0x6c() override; // vtable+0x6c
void VTable0x70(float) override; // vtable+0x70
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
MxU32 VTable0x90(float p_float, MxMatrix& p_matrix) override; // vtable+0x90
MxS32 VTable0x94() override; // vtable+0x94
void VTable0x9c() override; // vtable+0x9c
void VTable0xa4() override; // vtable+0xa4
void VTable0xc4() override; // vtable+0xc4
override; // vtable+0x68
void VTable0x6c() override; // vtable+0x6c
void VTable0x70(float) override; // vtable+0x70
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
MxU32 VTable0x90(float p_float, Matrix4& p_matrix) override; // vtable+0x90
MxS32 VTable0x94() override; // vtable+0x94
void VTable0x9c() override; // vtable+0x9c
void VTable0xa4() override; // vtable+0xa4
void VTable0xc4() override; // vtable+0xc4
virtual MxResult FUN_1002aae0();

View File

@ -46,7 +46,7 @@ class LegoPathActor : public LegoActor {
virtual void VTable0x8c(); // vtable+0x8c
// FUNCTION: LEGO1 0x10002d40
virtual MxU32 VTable0x90(float, MxMatrix&) { return FALSE; } // vtable+0x90
virtual MxU32 VTable0x90(float, Matrix4&) { return FALSE; } // vtable+0x90
// FUNCTION: LEGO1 0x10002d50
virtual MxS32 VTable0x94() { return 0; } // vtable+0x94

View File

@ -31,7 +31,7 @@ class LegoRaceActor : public virtual LegoAnimActor {
void VTable0x68(Mx3DPointFloat&, Mx3DPointFloat&, Mx3DPointFloat&) override; // vtable+0x68
void VTable0x70(float p_float) override; // vtable+0x70
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
MxU32 VTable0x90(float, MxMatrix&) override; // vtable+0x90
MxU32 VTable0x90(float, Matrix4&) override; // vtable+0x90
MxS32 VTable0x94() override; // vtable+0x94
// FUNCTION: LEGO1 0x10014aa0

View File

@ -10,7 +10,7 @@ DECOMP_SIZE_ASSERT(LegoCarRaceActor, 0x1a0)
const char* g_fuel = "FUEL";
// STUB: LEGO1 0x100141a0
MxU32 LegoCarRaceActor::VTable0x90(float, MxMatrix&)
MxU32 LegoCarRaceActor::VTable0x90(float, Matrix4&)
{
// TODO
return 0;

View File

@ -26,7 +26,7 @@ LegoExtraActor::~LegoExtraActor()
}
// FUNCTION: LEGO1 0x1002a720
MxU32 LegoExtraActor::VTable0x90(float p_time, MxMatrix& p_transform)
MxU32 LegoExtraActor::VTable0x90(float p_time, Matrix4& p_transform)
{
switch (m_unk0xdc & 0xff) {
case 0:
@ -39,25 +39,37 @@ MxU32 LegoExtraActor::VTable0x90(float p_time, MxMatrix& p_transform)
m_lastTime = p_time;
return FALSE;
case 3: {
Vector3 positionRef = Vector3(p_transform[3]);
Vector3 positionRef(p_transform[3]);
p_transform = m_roi->GetLocal2World();
if (p_time < m_scheduledTime) {
Mx3DPointFloat position = positionRef;
Mx3DPointFloat position;
position = positionRef;
positionRef.Clear();
switch (m_axis) {
case e_posz:
p_transform.RotateZ(0.7f);
break;
case e_negz:
p_transform.RotateZ(-0.7f);
break;
case e_posx:
p_transform.RotateX(0.7f);
break;
case e_negx:
p_transform.RotateX(-0.7f);
case e_posz: {
float angle = 0.7f;
p_transform.RotateZ(angle);
break;
}
case e_negz: {
float angle = -0.7f;
p_transform.RotateZ(angle);
break;
}
case e_posx: {
float angle = 0.7f;
p_transform.RotateX(angle);
break;
}
case e_negx: {
float angle = -0.7f;
p_transform.RotateX(angle);
break;
}
}
positionRef = position;
m_actorTime += (p_time - m_lastTime) * m_worldSpeed;
m_lastTime = p_time;
@ -67,7 +79,7 @@ MxU32 LegoExtraActor::VTable0x90(float p_time, MxMatrix& p_transform)
else {
m_unk0xdc = 0;
m_scheduledTime = 0.0f;
positionRef.Sub(&g_unk0x10104c18);
((Vector3&) positionRef).Sub(&g_unk0x10104c18); // TODO: Fix call
m_roi->FUN_100a58f0(p_transform);
return TRUE;
}

View File

@ -34,7 +34,7 @@ void LegoRaceActor::VTable0x70(float p_float)
}
// STUB: LEGO1 0x10014ce0
MxU32 LegoRaceActor::VTable0x90(float, MxMatrix&)
MxU32 LegoRaceActor::VTable0x90(float, Matrix4&)
{
// TODO
return 0;

View File

@ -114,7 +114,7 @@ class Matrix4 {
}
}
inline void RotateX(const float p_angle)
inline void RotateX(const float& p_angle)
{
float s = sin(p_angle);
float c = cos(p_angle);
@ -126,7 +126,7 @@ class Matrix4 {
}
}
inline void RotateZ(const float p_angle)
inline void RotateZ(const float& p_angle)
{
float s = sin(p_angle);
float c = cos(p_angle);