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); return !strcmp(p_name, LegoCarRaceActor::ClassName()) || LegoRaceActor::IsA(p_name);
} }
void VTable0x6c() override; // vtable+0x6c void VTable0x6c() override; // vtable+0x6c
void VTable0x70(float p_float) override; // vtable+0x70 void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0x90(float, MxMatrix&) override; // vtable+0x90 MxU32 VTable0x90(float, Matrix4&) override; // vtable+0x90
MxS32 VTable0x94() override; // vtable+0x94 MxS32 VTable0x94() override; // vtable+0x94
void VTable0x98() override; // vtable+0x98 void VTable0x98() override; // vtable+0x98
void VTable0x9c() override; // vtable+0x9c void VTable0x9c() override; // vtable+0x9c
virtual void FUN_10080590(); virtual void FUN_10080590();

View File

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

View File

@ -46,7 +46,7 @@ class LegoPathActor : public LegoActor {
virtual void VTable0x8c(); // vtable+0x8c virtual void VTable0x8c(); // vtable+0x8c
// FUNCTION: LEGO1 0x10002d40 // FUNCTION: LEGO1 0x10002d40
virtual MxU32 VTable0x90(float, MxMatrix&) { return FALSE; } // vtable+0x90 virtual MxU32 VTable0x90(float, Matrix4&) { return FALSE; } // vtable+0x90
// FUNCTION: LEGO1 0x10002d50 // FUNCTION: LEGO1 0x10002d50
virtual MxS32 VTable0x94() { return 0; } // vtable+0x94 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 VTable0x68(Mx3DPointFloat&, Mx3DPointFloat&, Mx3DPointFloat&) override; // vtable+0x68
void VTable0x70(float p_float) override; // vtable+0x70 void VTable0x70(float p_float) override; // vtable+0x70
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74 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 MxS32 VTable0x94() override; // vtable+0x94
// FUNCTION: LEGO1 0x10014aa0 // FUNCTION: LEGO1 0x10014aa0

View File

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

View File

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

View File

@ -34,7 +34,7 @@ void LegoRaceActor::VTable0x70(float p_float)
} }
// STUB: LEGO1 0x10014ce0 // STUB: LEGO1 0x10014ce0
MxU32 LegoRaceActor::VTable0x90(float, MxMatrix&) MxU32 LegoRaceActor::VTable0x90(float, Matrix4&)
{ {
// TODO // TODO
return 0; 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 s = sin(p_angle);
float c = cos(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 s = sin(p_angle);
float c = cos(p_angle); float c = cos(p_angle);