Implement LegoPathActor::VTable0x88 (#787)

* Implement LegoPathActor::VTable0x88

* Implement FUN_1002ddc0

* Fixes and match

* refac

---------

Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
Nathan M Gilbert
2024-04-11 07:35:15 -04:00
committed by GitHub
parent 507cd0cff4
commit ada83989b1
13 changed files with 164 additions and 16 deletions

View File

@@ -1,6 +1,7 @@
#ifndef __LEGOEDGE_H
#define __LEGOEDGE_H
#include "misc/legotypes.h"
#include "realtime/vector.h"
class LegoWEEdge;
@@ -16,6 +17,8 @@ struct LegoEdge {
Vector3* GetOpposingPoint(LegoWEEdge* face);
Vector3* GetPoint(LegoWEEdge* face);
LegoResult FUN_1002ddc0(LegoWEEdge* p_face, Vector3& p_point);
// SYNTHETIC: LEGO1 0x1009a4a0
// LegoEdge::`scalar deleting destructor'

View File

@@ -0,0 +1,3 @@
#include "legounkown100db7f4.h"
DECOMP_SIZE_ASSERT(LegoUnknown100db7f4, 0x40)

View File

@@ -0,0 +1,33 @@
#ifndef __LEGOUNKNOWN100DB7F4_H
#define __LEGOUNKNOWN100DB7F4_H
#include "legoedge.h"
#include "legoweedge.h"
#include "mxgeometry/mxgeometry3d.h"
// VTABLE: LEGO1 0x100db7f4
// SIZE 0x40
class LegoUnknown100db7f4 : public LegoEdge {
public:
// FUNCTION: LEGO1 0x1002ddc0
LegoResult FUN_1002ddc0(LegoWEEdge& p_f, Vector3& p_point)
{
if (p_f.IsEqual(*m_faceA)) {
p_point[0] = -m_unk0x28[0];
p_point[1] = -m_unk0x28[1];
p_point[2] = -m_unk0x28[2];
}
else {
p_point = m_unk0x28;
}
return SUCCESS;
}
private:
LegoU16 m_unk0x24; // 0x24
Mx3DPointFloat m_unk0x28; // 0x28
LegoU32 m_unk0x3c; // 0x3c
};
#endif // __LEGOUNKNOWN100DB7F4_H

View File

@@ -15,6 +15,7 @@ public:
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'

View File

@@ -15,6 +15,7 @@ public:
LegoResult VTable0x04() override; // vtable+0x04
inline LegoU32 GetFlag0x10() { return m_unk0x0c & 0x10 ? FALSE : TRUE; }
inline Mx4DPointFloat* GetUnknown0x14() { return &m_unk0x14; }
inline Mx4DPointFloat* GetEdgeNormal(int index) { return &m_edgeNormals[index]; }
// SYNTHETIC: LEGO1 0x1009a7e0