Implement/match IslePathActor::Exit (#997)

* Implement/match IslePathActor::Exit

* Name

* Name

* Partially fix vector interface

* Revert "Partially fix vector interface"

This reverts commit 6e7a1e2b08.

* Revert "Revert "Partially fix vector interface""

This reverts commit e3860e3c9f.

* Fix

* Remove some COMPAT_MODE
This commit is contained in:
Christian Semmler
2024-06-06 11:45:37 -04:00
committed by GitHub
parent 9b22642f0c
commit 9a9bccda0e
41 changed files with 196 additions and 153 deletions

View File

@@ -97,7 +97,7 @@ MxU32 LegoExtraActor::VTable0x90(float p_time, Matrix4& p_transform)
else {
m_state = 0;
m_scheduledTime = 0.0f;
((Vector3&) positionRef).Sub(&g_unk0x10104c18); // TODO: Fix call
((Vector3&) positionRef).Sub(g_unk0x10104c18); // TODO: Fix call
m_roi->FUN_100a58f0(p_transform);
return TRUE;
}
@@ -218,7 +218,7 @@ MxResult LegoExtraActor::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
// TODO: Fix calls
((Mx3DPointFloat&) dir).Mul(2.0f);
((Vector3&) positionRef).Add(&dir);
((Vector3&) positionRef).Add(dir);
for (MxS32 i = 0; i < m_boundary->GetNumEdges(); i++) {
Mx4DPointFloat* normal = m_boundary->GetEdgeNormal(i);
@@ -251,7 +251,7 @@ MxResult LegoExtraActor::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
Mx3DPointFloat dir = p_actor->GetWorldDirection();
MxMatrix matrix3 = MxMatrix(roi->GetLocal2World());
Vector3 positionRef(matrix3[3]);
((Vector3&) positionRef).Add(&g_unk0x10104c18);
((Vector3&) positionRef).Add(g_unk0x10104c18);
roi->FUN_100a58f0(matrix3);
#ifdef COMPAT_MODE
@@ -463,7 +463,7 @@ MxU32 LegoExtraActor::VTable0x6c(
Vector3 local60(local2world[3]);
Mx3DPointFloat local54(p_v1);
((Vector3&) local54).Sub(&local60);
((Vector3&) local54).Sub(local60);
float local1c = p_v2.Dot(&p_v2, &p_v2);
float local24 = p_v2.Dot(&p_v2, &local54) * 2.0f;
float local20 = local54.Dot(&local54, &local54);

View File

@@ -68,7 +68,7 @@ MxResult LegoPathActor::VTable0x80(Vector3& p_point1, Vector3& p_point2, Vector3
Mx3DPointFloat p1, p2, p3;
p1 = p_point3;
((Vector3&) p1).Sub(&p_point1);
((Vector3&) p1).Sub(p_point1);
m_BADuration = p1.LenSquared();
if (m_BADuration > 0.0f) {
@@ -102,14 +102,14 @@ MxResult LegoPathActor::VTable0x88(
Mx3DPointFloat p1, p2, p3, p4, p5;
p1 = *v2;
((Vector3&) p1).Sub(v1);
((Vector3&) p1).Sub(*v1);
((Vector3&) p1).Mul(p_srcScale);
((Vector3&) p1).Add(v1);
((Vector3&) p1).Add(*v1);
p2 = *v4;
((Vector3&) p2).Sub(v3);
((Vector3&) p2).Sub(*v3);
((Vector3&) p2).Mul(p_destScale);
((Vector3&) p2).Add(v3);
((Vector3&) p2).Add(*v3);
m_boundary = p_boundary;
m_destEdge = &p_destEdge;
@@ -120,7 +120,7 @@ MxResult LegoPathActor::VTable0x88(
p_destEdge.FUN_1002ddc0(*p_boundary, p3);
p4 = p2;
((Vector3&) p4).Sub(&p1);
((Vector3&) p4).Sub(p1);
p4.Unitize();
MxMatrix matrix;
@@ -177,9 +177,9 @@ MxResult LegoPathActor::VTable0x84(
Mx3DPointFloat p2, p3, p5;
p2 = *v4;
((Vector3&) p2).Sub(v3);
((Vector3&) p2).Sub(*v3);
((Vector3&) p2).Mul(p_destScale);
((Vector3&) p2).Add(v3);
((Vector3&) p2).Add(*v3);
m_boundary = p_boundary;
m_destEdge = &p_destEdge;
@@ -285,12 +285,12 @@ MxS32 LegoPathActor::VTable0x8c(float p_time, Matrix4& p_transform)
m_worldSpeed *= m_unk0x144;
nav->SetLinearVel(m_worldSpeed);
Mx3DPointFloat p7(p2);
((Vector3&) p7).Sub(&p6);
((Vector3&) p7).Sub(p6);
if (p7.Unitize() == 0) {
float f = sqrt(p1.LenSquared()) * m_unk0x140;
((Vector3&) p7).Mul(f);
((Vector3&) p1).Add(&p7);
((Vector3&) p1).Add(p7);
}
}
}
@@ -474,7 +474,7 @@ MxU32 LegoPathActor::VTable0x6c(
MxS32 LegoPathActor::VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3)
{
Mx3DPointFloat v2(p_v2);
((Vector3&) v2).Sub(&p_v1);
((Vector3&) v2).Sub(p_v1);
float len = v2.LenSquared();
@@ -553,7 +553,7 @@ void LegoPathActor::ParseAction(char* p_extra)
if (KeyValueStringParse(value, g_strPERMIT_NAVIGATE, p_extra)) {
SetUserNavFlag(TRUE);
NavController()->ResetLinearVel(m_worldSpeed);
NavController()->ResetMaxLinearVel(m_worldSpeed);
SetCurrentActor(this);
}
@@ -650,7 +650,7 @@ MxResult LegoPathActor::VTable0x9c()
Mx3DPointFloat local84(m_unk0xec[2]);
Mx3DPointFloat local70(local34);
((Vector3&) local70).Sub(&localc0);
((Vector3&) local70).Sub(localc0);
float len = local70.LenSquared();
if (len >= 0.0f) {
len = sqrt(len);

View File

@@ -53,11 +53,11 @@ void LegoPathBoundary::FUN_100575b0(Vector3& p_point1, Vector3& p_point2, LegoPa
Mx3DPointFloat v;
v = p_point1;
((Vector3&) v).Sub(ccwV);
((Vector3&) v).Sub(*ccwV);
float dot1 = v.Dot(&v, m_unk0x50);
v = p_point2;
((Vector3&) v).Sub(ccwV);
((Vector3&) v).Sub(*ccwV);
float dot2 = v.Dot(&v, m_unk0x50);
if (dot2 > dot1) {
@@ -201,7 +201,7 @@ MxU32 LegoPathBoundary::Intersect(
if (local10 == 0) {
local10 = 1;
vec = p_point2;
((Vector3&) vec).Sub(&p_point1);
((Vector3&) vec).Sub(p_point1);
len = vec.LenSquared();
if (len <= 0.0f) {
@@ -235,10 +235,10 @@ MxU32 LegoPathBoundary::Intersect(
p_point3 = vec;
p_point3.Mul(localc);
p_point3.Add(&p_point1);
p_point3.Add(p_point1);
local50 = p_point2;
((Vector3&) local50).Sub(local5c);
((Vector3&) local50).Sub(*local5c);
e->FUN_1002ddc0(*this, local70);
@@ -258,7 +258,7 @@ MxU32 LegoPathBoundary::Intersect(
Vector3* local90 = local88->CWVertex(*this);
Mx3DPointFloat locala4(p_point3);
((Vector3&) locala4).Sub(local90);
((Vector3&) locala4).Sub(*local90);
float local8c = locala4.Dot(&locala4, &local84);
@@ -285,7 +285,7 @@ MxU32 LegoPathBoundary::Intersect(
Vector3* localc4 = locala8->CWVertex(*this);
Mx3DPointFloat locald8(p_point3);
((Vector3&) locald8).Sub(localc4);
((Vector3&) locald8).Sub(*localc4);
float localc0 = locald8.Dot(&locald8, &localbc);
@@ -317,7 +317,7 @@ MxU32 LegoPathBoundary::Intersect(
else if (local58 > 0.0f && e->m_unk0x3c > local58) {
p_point3 = local70;
p_point3.Mul(local58);
p_point3.Add(local5c);
p_point3.Add(*local5c);
p_edge = e;
return 1;
}
@@ -345,7 +345,7 @@ MxU32 LegoPathBoundary::FUN_10057fe0(LegoAnimPresenter* p_presenter)
Mx3DPointFloat unk0x30;
unk0x30 = m_unk0x30;
((Vector3&) unk0x30).Sub(&p_presenter->m_unk0xa8);
((Vector3&) unk0x30).Sub(p_presenter->m_unk0xa8);
float len = unk0x30.LenSquared();
float local20 = p_presenter->m_unk0xa4 + m_unk0x44;

View File

@@ -94,7 +94,7 @@ MxResult LegoPathController::Create(MxU8* p_data, const Vector3& p_location, con
for (i = 0; i < m_numN; i++) {
// TODO: Fix call
((Vector3&) m_unk0x10[i]).Add(&p_location);
((Vector3&) m_unk0x10[i]).Add(p_location);
}
for (i = 0; i < m_numL; i++) {
@@ -756,9 +756,9 @@ MxS32 LegoPathController::FUN_1004a240(
Mx3DPointFloat vec;
p_v1 = *p_edge->CCWVertex(*p_boundary);
p_v1.Sub(p_edge->CWVertex(*p_boundary));
p_v1.Sub(*p_edge->CWVertex(*p_boundary));
p_v1.Mul(p_f1);
p_v1.Add(p_edge->CWVertex(*p_boundary));
p_v1.Add(*p_edge->CWVertex(*p_boundary));
p_edge->FUN_1002ddc0(*p_boundary, vec);
p_v2.EqualsCross(p_boundary->GetUnknown0x14(), &vec);
return 0;