mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-26 01:17:55 -05:00
Implement LegoUnknown::FUN_1009a1e0 (#940)
This commit is contained in:
parent
fb16b2c896
commit
8428cde67f
3 changed files with 49 additions and 5 deletions
|
@ -27,8 +27,52 @@ void LegoUnknown::FUN_1009a140(Vector3& p_point1, Vector3& p_point2, Vector3& p_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1009a1e0
|
// FUNCTION: LEGO1 0x1009a1e0
|
||||||
LegoResult LegoUnknown::FUN_1009a1e0(float, Matrix4&, Vector3&, LegoU32)
|
// FUNCTION: BETA10 0x10182d61
|
||||||
|
LegoResult LegoUnknown::FUN_1009a1e0(float p_f1, Matrix4& p_mat, Vector3& p_v, LegoU32 p_und)
|
||||||
{
|
{
|
||||||
|
Vector3 v1(p_mat[3]);
|
||||||
|
Vector3 v2(p_mat[0]);
|
||||||
|
Vector3 v3(p_mat[1]);
|
||||||
|
Vector3 v4(p_mat[2]);
|
||||||
|
|
||||||
|
if (p_f1 <= 0.001) {
|
||||||
|
v1 = m_unk0x00[0];
|
||||||
|
v4 = m_unk0x00[1];
|
||||||
|
}
|
||||||
|
else if (p_f1 >= 0.999) {
|
||||||
|
v1 = m_unk0x00[0];
|
||||||
|
((Vector3&) v2).Add(&m_unk0x00[1]);
|
||||||
|
((Vector3&) v3).Add(&m_unk0x00[2]);
|
||||||
|
((Vector3&) v4).Add(&m_unk0x00[3]);
|
||||||
|
|
||||||
|
for (LegoS32 i = 0; i < 3; i++) {
|
||||||
|
v4[i] = m_unk0x00[1][i] + m_unk0x00[2][i] * 2.0f + m_unk0x00[3][i] * 3.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
float local30 = p_f1 * p_f1;
|
||||||
|
float local34 = local30 * p_f1;
|
||||||
|
|
||||||
|
for (LegoS32 i = 0; i < 3; i++) {
|
||||||
|
v1[i] = m_unk0x00[0][i] + m_unk0x00[1][i] * p_f1 + m_unk0x00[2][i] * local30 + m_unk0x00[3][i] * local34;
|
||||||
|
v4[i] = m_unk0x00[1][i] + m_unk0x00[2][i] * p_f1 * 2.0f + m_unk0x00[3][i] * local30 * 3.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_und) {
|
||||||
|
((Vector3&) v4).Mul(-1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (v4.Unitize() != 0) {
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v2.EqualsCross(&p_v, &v4);
|
||||||
|
if (v2.Unitize() != 0) {
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
v3.EqualsCross(&v4, &v2);
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ class LegoUnknown {
|
||||||
~LegoUnknown();
|
~LegoUnknown();
|
||||||
|
|
||||||
void FUN_1009a140(Vector3& p_point1, Vector3& p_point2, Vector3& p_point3, Vector3& p_point4);
|
void FUN_1009a140(Vector3& p_point1, Vector3& p_point2, Vector3& p_point3, Vector3& p_point4);
|
||||||
LegoResult FUN_1009a1e0(float, Matrix4&, Vector3&, LegoU32);
|
LegoResult FUN_1009a1e0(float p_f1, Matrix4& p_mat, Vector3& p_v, LegoU32 p_und);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Mx3DPointFloat m_unk0x00[4]; // 0x00
|
Mx3DPointFloat m_unk0x00[4]; // 0x00
|
||||||
|
|
|
@ -104,7 +104,7 @@ class Vector2 {
|
||||||
|
|
||||||
if (sq > 0.0f) {
|
if (sq > 0.0f) {
|
||||||
float root = sqrt(sq);
|
float root = sqrt(sq);
|
||||||
if (root > 0) {
|
if (root > 0.0f) {
|
||||||
DivScalarImpl(&root);
|
DivScalarImpl(&root);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue