mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-29 19:05:34 -05:00
Implement PathActor VTable0x80 and PathActorStruct FUN_1009a140 (#781)
* Implement PathActor VTable0x80 and PathActorStruct FUN_1009a140 * Match functions, fixes * fixes --------- Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
parent
17680522c2
commit
b394770864
8 changed files with 57 additions and 24 deletions
|
@ -11,6 +11,7 @@ class LegoPathController;
|
|||
struct LegoActorStruct {
|
||||
LegoActorStruct();
|
||||
~LegoActorStruct();
|
||||
void FUN_1009a140(Vector3& p_point1, Vector3& p_point2, Vector3& p_point3, Vector3& p_point4);
|
||||
|
||||
Mx3DPointFloat m_unk0x00[4]; // 0x00
|
||||
};
|
||||
|
@ -47,7 +48,12 @@ class LegoPathActor : public LegoActor {
|
|||
// FUNCTION: LEGO1 0x10002d30
|
||||
virtual MxU8 GetUserNavFlag() { return m_userNavFlag; } // vtable+0x7c
|
||||
|
||||
virtual void VTable0x80(); // vtable+0x80
|
||||
virtual MxResult VTable0x80(
|
||||
Vector3& p_point1,
|
||||
Vector3& p_point2,
|
||||
Vector3& p_point3,
|
||||
Vector3& p_point4
|
||||
); // vtable+0x80
|
||||
virtual void VTable0x84(); // vtable+0x84
|
||||
virtual void VTable0x88(); // vtable+0x88
|
||||
virtual void VTable0x8c(); // vtable+0x8c
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#include "legopathactor.h"
|
||||
|
||||
#include <vec.h>
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoPathActor, 0x154)
|
||||
|
||||
// FUNCTION: LEGO1 0x1002d700
|
||||
|
@ -29,10 +31,25 @@ LegoPathActor::~LegoPathActor()
|
|||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1002d8d0
|
||||
void LegoPathActor::VTable0x80()
|
||||
// FUNCTION: LEGO1 0x1002d8d0
|
||||
MxResult LegoPathActor::VTable0x80(Vector3& p_point1, Vector3& p_point2, Vector3& p_point3, Vector3& p_point4)
|
||||
{
|
||||
// TODO
|
||||
Mx3DPointFloat p1, p2, p3;
|
||||
|
||||
p1 = p_point3;
|
||||
((Vector3&) p1).Sub(&p_point1);
|
||||
m_BADuration = p1.LenSquared();
|
||||
|
||||
if (m_BADuration > 0.0f) {
|
||||
m_BADuration = sqrtf(m_BADuration);
|
||||
p2 = p_point2;
|
||||
p3 = p_point4;
|
||||
m_unk0x8c.FUN_1009a140(p_point1, p2, p_point3, p3);
|
||||
m_BADuration /= 0.001;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1002d9c0
|
||||
|
@ -120,3 +137,15 @@ LegoActorStruct::LegoActorStruct()
|
|||
LegoActorStruct::~LegoActorStruct()
|
||||
{
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1009a140
|
||||
void LegoActorStruct::FUN_1009a140(Vector3& p_point1, Vector3& p_point2, Vector3& p_point3, Vector3& p_point4)
|
||||
{
|
||||
m_unk0x00[0] = p_point1;
|
||||
m_unk0x00[1] = p_point2;
|
||||
|
||||
for (MxS32 i = 0; i < 3; i++) {
|
||||
m_unk0x00[2][i] = (p_point3[i] - p_point1[i]) * 3.0f - p_point2[i] * 2.0f - p_point4[i];
|
||||
m_unk0x00[3][i] = (p_point1[i] - p_point3[i]) * 2.0f + p_point4[i] + p_point2[i];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,8 +30,6 @@
|
|||
#include "skateboard.h"
|
||||
#include "towtrack.h"
|
||||
|
||||
#include <vec.h>
|
||||
|
||||
DECOMP_SIZE_ASSERT(Isle, 0x140)
|
||||
|
||||
// GLOBAL: LEGO1 0x100f1198
|
||||
|
@ -664,14 +662,14 @@ void Isle::Enable(MxBool p_enable)
|
|||
Mx3DPointFloat position(CurrentActor()->GetROI()->GetWorldPosition());
|
||||
|
||||
Mx3DPointFloat sub(-21.375f, 0.0f, -41.75f);
|
||||
sub.Sub(&position);
|
||||
if (NORMSQRD3(sub) < 1024.0f) {
|
||||
((Vector3&) sub).Sub(&position);
|
||||
if (sub.LenSquared() < 1024.0f) {
|
||||
AnimationManager()->FUN_10064740(FALSE);
|
||||
}
|
||||
|
||||
Mx3DPointFloat sub2(98.874992f, 0.0f, -46.156292f);
|
||||
sub2.Sub(&position);
|
||||
if (NORMSQRD3(sub2) < 1024.0f) {
|
||||
((Vector3&) sub2).Sub(&position);
|
||||
if (sub2.LenSquared() < 1024.0f) {
|
||||
AnimationManager()->FUN_10064670(FALSE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,8 +32,8 @@ class Mx3DPointFloat : public Vector3 {
|
|||
inline float GetY() { return m_data[1]; }
|
||||
inline float GetZ() { return m_data[2]; }
|
||||
|
||||
inline float& operator[](size_t idx) { return m_data[idx]; }
|
||||
inline const float& operator[](size_t idx) const { return m_data[idx]; }
|
||||
inline float& operator[](int idx) { return m_data[idx]; }
|
||||
inline const float& operator[](int idx) const { return m_data[idx]; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10010c00
|
||||
// Mx3DPointFloat::operator=
|
||||
|
@ -60,8 +60,8 @@ class Mx4DPointFloat : public Vector4 {
|
|||
// FUNCTION: LEGO1 0x10003200
|
||||
virtual void operator=(const Vector4& p_impl) { EqualsImpl(p_impl.m_data); } // vtable+0x98
|
||||
|
||||
inline float& operator[](size_t idx) { return m_data[idx]; }
|
||||
inline const float& operator[](size_t idx) const { return m_data[idx]; }
|
||||
inline float& operator[](int idx) { return m_data[idx]; }
|
||||
inline const float& operator[](int idx) const { return m_data[idx]; }
|
||||
|
||||
private:
|
||||
float m_elements[4]; // 0x08
|
||||
|
|
|
@ -14,8 +14,8 @@ class MxMatrix : public Matrix4 {
|
|||
|
||||
inline MxMatrix(const Matrix4& p_matrix) : Matrix4(m_elements) { Equals(p_matrix); }
|
||||
|
||||
float* operator[](size_t idx) { return m_data[idx]; }
|
||||
const float* operator[](size_t idx) const { return m_data[idx]; }
|
||||
float* operator[](int idx) { return m_data[idx]; }
|
||||
const float* operator[](int idx) const { return m_data[idx]; }
|
||||
|
||||
// FUNCTION: LEGO1 0x10002850
|
||||
void operator=(const Matrix4& p_matrix) override { Equals(p_matrix); } // vtable+0x28
|
||||
|
|
|
@ -144,8 +144,8 @@ class Matrix4 {
|
|||
inline virtual void ToQuaternion(Vector4& p_resultQuat); // vtable+0x40
|
||||
inline virtual int FromQuaternion(const Vector4& p_vec); // vtable+0x44
|
||||
|
||||
float* operator[](size_t idx) { return m_data[idx]; }
|
||||
const float* operator[](size_t idx) const { return m_data[idx]; }
|
||||
float* operator[](int idx) { return m_data[idx]; }
|
||||
const float* operator[](int idx) const { return m_data[idx]; }
|
||||
|
||||
protected:
|
||||
float (*m_data)[4];
|
||||
|
|
|
@ -152,8 +152,8 @@ class Vector2 {
|
|||
Vector2::SetVector(&p_other);
|
||||
return *this;
|
||||
}
|
||||
inline float& operator[](size_t idx) { return m_data[idx]; }
|
||||
inline const float& operator[](size_t idx) const { return m_data[idx]; }
|
||||
inline float& operator[](int idx) { return m_data[idx]; }
|
||||
inline const float& operator[](int idx) const { return m_data[idx]; }
|
||||
|
||||
protected:
|
||||
float* m_data; // 0x04
|
||||
|
@ -265,7 +265,7 @@ class Vector3 : public Vector2 {
|
|||
// FUNCTION: LEGO1 0x10003bd0
|
||||
float LenSquared() const override
|
||||
{
|
||||
return m_data[1] * m_data[1] + m_data[0] * m_data[0] + m_data[2] * m_data[2];
|
||||
return m_data[0] * m_data[0] + m_data[1] * m_data[1] + m_data[2] * m_data[2];
|
||||
} // vtable+0x40
|
||||
|
||||
inline void Fill(float p_value) { EqualsScalar(&p_value); }
|
||||
|
|
|
@ -2,9 +2,10 @@
|
|||
|
||||
#include "mxdirectx/mxstopwatch.h"
|
||||
#include "tgl/d3drm/impl.h"
|
||||
#include "vec.h"
|
||||
#include "viewlod.h"
|
||||
|
||||
#include <vec.h>
|
||||
|
||||
DECOMP_SIZE_ASSERT(ViewManager, 0x1bc)
|
||||
|
||||
// GLOBAL: LEGO1 0x100dbcd8
|
||||
|
@ -372,8 +373,7 @@ void ViewManager::FUN_100a6b90()
|
|||
{
|
||||
flags &= ~c_bit2;
|
||||
|
||||
// TODO: Should be signed, but worsens match
|
||||
unsigned int i, j, k;
|
||||
int i, j, k;
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (j = 0; j < 3; j++) {
|
||||
|
|
Loading…
Reference in a new issue