mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-24 08:41:16 +00:00
Fixes and match
This commit is contained in:
parent
1b58843aa5
commit
2536cf4492
@ -154,7 +154,6 @@ add_library(geom STATIC
|
||||
LEGO1/lego/sources/geom/legovertex.cpp
|
||||
LEGO1/lego/sources/geom/legoweedge.cpp
|
||||
LEGO1/lego/sources/geom/legowegedge.cpp
|
||||
|
||||
)
|
||||
register_lego1_target(geom)
|
||||
set_property(TARGET geom PROPERTY ARCHIVE_OUTPUT_NAME "geom$<$<CONFIG:Debug>:d>")
|
||||
|
||||
@ -52,10 +52,10 @@ class LegoPathActor : public LegoActor {
|
||||
virtual MxResult VTable0x88(
|
||||
LegoPathBoundary* p_boundary,
|
||||
float p_time,
|
||||
LegoEdge& p_edge1,
|
||||
float p_scale1,
|
||||
LegoUnknown100db7f4& p_edge2,
|
||||
float p_scale2
|
||||
LegoEdge& p_srcEdge,
|
||||
float p_srcScale,
|
||||
LegoUnknown100db7f4& p_destEdge,
|
||||
float p_destScale
|
||||
); // vtable+0x88
|
||||
virtual void VTable0x8c(); // vtable+0x8c
|
||||
|
||||
|
||||
@ -217,8 +217,8 @@ MxU32 Helicopter::VTable0xd4(LegoControlManagerEvent& p_param)
|
||||
lookat.Add(&loc);
|
||||
Mx3DPointFloat v68, v7c, v90(0, 1, 0), va4;
|
||||
v68 = m_world->GetCamera()->GetWorldUp();
|
||||
va4.EqualsCross(v68, dir);
|
||||
v7c.EqualsCross(va4, v90);
|
||||
va4.EqualsCross(&v68, &dir);
|
||||
v7c.EqualsCross(&va4, &v90);
|
||||
if (ret) {
|
||||
if (((Act3*) m_world)->FUN_100727e0(m_controller, loc, dir, v7c)) {
|
||||
break;
|
||||
|
||||
@ -58,71 +58,77 @@ MxResult LegoPathActor::VTable0x88(
|
||||
float p_time,
|
||||
LegoEdge& p_srcEdge,
|
||||
float p_srcScale,
|
||||
LegoUnknown100db7f4& p_dstEdge,
|
||||
float p_dstScale
|
||||
LegoUnknown100db7f4& p_destEdge,
|
||||
float p_destScale
|
||||
)
|
||||
{
|
||||
Vector3* v1 = p_srcEdge.GetOpposingPoint(p_boundary);
|
||||
Vector3* v2 = p_srcEdge.GetPoint(p_boundary);
|
||||
Vector3* v3 = p_dstEdge.GetOpposingPoint(p_boundary);
|
||||
Vector3* v4 = p_dstEdge.GetPoint(p_boundary);
|
||||
Mx3DPointFloat p1, p2, p3, p4, p5;
|
||||
Vector3* v3 = p_destEdge.GetOpposingPoint(p_boundary);
|
||||
Vector3* v4 = p_destEdge.GetPoint(p_boundary);
|
||||
|
||||
Mx3DPointFloat p1;
|
||||
Mx3DPointFloat p2;
|
||||
Mx3DPointFloat p3;
|
||||
Mx3DPointFloat p4;
|
||||
Mx3DPointFloat p5;
|
||||
|
||||
p1 = *v2;
|
||||
((Vector3&) p1).Sub(v1);
|
||||
((Vector3&) p1).Mul(p_srcScale);
|
||||
((Vector3&) p1).Add(v1);
|
||||
|
||||
p2 = *v4;
|
||||
((Vector3&) p2).Sub(v3);
|
||||
((Vector3&) p2).Mul(p_dstScale);
|
||||
((Vector3&) p2).Mul(p_destScale);
|
||||
((Vector3&) p2).Add(v3);
|
||||
|
||||
m_boundary = p_boundary;
|
||||
m_destEdge = &p_dstEdge;
|
||||
m_unk0xe4 = p_dstScale;
|
||||
m_destEdge = &p_destEdge;
|
||||
m_unk0xe4 = p_destScale;
|
||||
m_unk0x7c = 0;
|
||||
m_lastTime = p_time;
|
||||
m_actorTime = p_time;
|
||||
m_unk0x7c = 0;
|
||||
p_dstEdge.FUN_1002ddc0(m_boundary, p3);
|
||||
p_destEdge.FUN_1002ddc0(*p_boundary, p3);
|
||||
|
||||
p4 = p2;
|
||||
((Vector3&) p4).Sub(&p1);
|
||||
float len = ((Vector3&) p4).LenSquared();
|
||||
if (len > 0) {
|
||||
len = sqrtf(len);
|
||||
if (len > 0) {
|
||||
p4.Div(len);
|
||||
}
|
||||
}
|
||||
p4.Unitize();
|
||||
|
||||
MxMatrix matrix;
|
||||
Vector3 pos(matrix[3]);
|
||||
Vector3 dir(matrix[2]);
|
||||
Vector3 up(matrix[1]);
|
||||
Vector3 right(matrix[0]);
|
||||
|
||||
matrix.SetIdentity();
|
||||
pos = p1;
|
||||
dir = p4;
|
||||
up = *m_boundary->GetUnknown0x14();
|
||||
up = *m_boundary->GetUnknown0x14(); // TODO
|
||||
|
||||
if (!m_cameraFlag || !m_userNavFlag) {
|
||||
((Vector3&) dir).Mul(-1.0f);
|
||||
}
|
||||
|
||||
right.EqualsCross(&up, &dir);
|
||||
m_roi->FUN_100a46b0(matrix);
|
||||
if (m_cameraFlag && m_userNavFlag) {
|
||||
|
||||
if (!m_cameraFlag || !m_userNavFlag) {
|
||||
p5.EqualsCross(p_boundary->GetUnknown0x14(), &p3);
|
||||
p5.Unitize();
|
||||
|
||||
if (VTable0x80(p1, p4, p2, p5) == SUCCESS) {
|
||||
m_boundary->AddActor(this);
|
||||
}
|
||||
else {
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
m_boundary->AddActor(this);
|
||||
FUN_10010c30();
|
||||
}
|
||||
else {
|
||||
((Vector3&) p5).EqualsCrossImpl(p_boundary->GetUnknown0x14()->GetData(), p3.GetData());
|
||||
float len2 = ((Vector3&) p5).LenSquared();
|
||||
if (len2 > 0) {
|
||||
len2 = sqrtf(len2);
|
||||
if (len2 > 0) {
|
||||
p5.Div(len2);
|
||||
}
|
||||
}
|
||||
if (VTable0x80(p1, p4, p2, p5) != SUCCESS) {
|
||||
return FAILURE;
|
||||
}
|
||||
m_boundary->AddActor(this);
|
||||
}
|
||||
|
||||
m_unk0xec = m_roi->GetLocal2World();
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#define __LEGOUNKNOWN100DB7F4_H
|
||||
|
||||
#include "legoedge.h"
|
||||
#include "legoweedge.h"
|
||||
#include "mxgeometry/mxgeometry3d.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100db7f4
|
||||
@ -9,9 +10,9 @@
|
||||
class LegoUnknown100db7f4 : public LegoEdge {
|
||||
public:
|
||||
// FUNCTION: LEGO1 0x1002ddc0
|
||||
LegoResult FUN_1002ddc0(LegoWEEdge* p_face, Vector3& p_point)
|
||||
LegoResult FUN_1002ddc0(LegoWEEdge& p_f, Vector3& p_point)
|
||||
{
|
||||
if (p_face == m_faceA) {
|
||||
if (p_f.IsEqual(*m_faceA)) {
|
||||
p_point[0] = -m_unk0x28[0];
|
||||
p_point[1] = -m_unk0x28[1];
|
||||
p_point[2] = -m_unk0x28[2];
|
||||
@ -19,6 +20,7 @@ class LegoUnknown100db7f4 : public LegoEdge {
|
||||
else {
|
||||
p_point = m_unk0x28;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -15,6 +15,7 @@ class LegoWEEdge {
|
||||
virtual LegoResult VTable0x04(); // vtable+0x04
|
||||
|
||||
inline LegoU8 GetNumEdges() { return m_numEdges; }
|
||||
inline LegoU32 IsEqual(LegoWEEdge& p_other) { return this == &p_other; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1009a570
|
||||
// LegoWEEdge::`scalar deleting destructor'
|
||||
|
||||
@ -38,8 +38,6 @@ class Mx3DPointFloat : public Vector3 {
|
||||
// SYNTHETIC: LEGO1 0x10010c00
|
||||
// Mx3DPointFloat::operator=
|
||||
|
||||
inline void EqualsCross(Mx3DPointFloat& p_a, Mx3DPointFloat& p_b) { EqualsCrossImpl(p_a.m_data, p_b.m_data); }
|
||||
|
||||
private:
|
||||
float m_elements[3]; // 0x08
|
||||
};
|
||||
|
||||
@ -101,6 +101,7 @@ class Vector2 {
|
||||
virtual int Unitize()
|
||||
{
|
||||
float sq = LenSquared();
|
||||
|
||||
if (sq > 0.0f) {
|
||||
float root = sqrt(sq);
|
||||
if (root > 0) {
|
||||
@ -108,6 +109,7 @@ class Vector2 {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
} // vtable+0x44
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user