mirror of
https://github.com/isledecomp/isle.git
synced 2024-11-29 11:06:05 -05:00
Refactor/Implement/Match LegoEdge (#786)
* Refactor/Implement/Match LegoEdge * Reorder annotation --------- Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
parent
5cf04bc3c3
commit
507cd0cff4
6 changed files with 103 additions and 22 deletions
|
@ -147,6 +147,7 @@ target_link_libraries(roi PRIVATE viewmanager Vec::Vec)
|
||||||
|
|
||||||
add_library(geom STATIC
|
add_library(geom STATIC
|
||||||
LEGO1/lego/sources/geom/legobox.cpp
|
LEGO1/lego/sources/geom/legobox.cpp
|
||||||
|
LEGO1/lego/sources/geom/legoedge.cpp
|
||||||
LEGO1/lego/sources/geom/legomesh.cpp
|
LEGO1/lego/sources/geom/legomesh.cpp
|
||||||
LEGO1/lego/sources/geom/legosphere.cpp
|
LEGO1/lego/sources/geom/legosphere.cpp
|
||||||
LEGO1/lego/sources/geom/legovertex.cpp
|
LEGO1/lego/sources/geom/legovertex.cpp
|
||||||
|
|
|
@ -109,7 +109,7 @@ class LegoPathActor : public LegoActor {
|
||||||
LegoPathBoundary* m_boundary; // 0x88
|
LegoPathBoundary* m_boundary; // 0x88
|
||||||
LegoUnknown m_unk0x8c; // 0x8c
|
LegoUnknown m_unk0x8c; // 0x8c
|
||||||
MxU32 m_state; // 0xdc
|
MxU32 m_state; // 0xdc
|
||||||
Edge* m_destEdge; // 0xe0
|
LegoEdge* m_destEdge; // 0xe0
|
||||||
undefined4 m_unk0xe4; // 0xe4
|
undefined4 m_unk0xe4; // 0xe4
|
||||||
undefined m_unk0xe8; // 0xe8
|
undefined m_unk0xe8; // 0xe8
|
||||||
undefined m_unk0xe9; // 0xe9
|
undefined m_unk0xe9; // 0xe9
|
||||||
|
|
63
LEGO1/lego/sources/geom/legoedge.cpp
Normal file
63
LEGO1/lego/sources/geom/legoedge.cpp
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#include "legoedge.h"
|
||||||
|
|
||||||
|
#include "decomp.h"
|
||||||
|
|
||||||
|
DECOMP_SIZE_ASSERT(LegoEdge, 0x24)
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1009a470
|
||||||
|
LegoEdge::LegoEdge()
|
||||||
|
{
|
||||||
|
m_faceA = NULL;
|
||||||
|
m_faceB = NULL;
|
||||||
|
m_ccwA = NULL;
|
||||||
|
m_cwA = NULL;
|
||||||
|
m_ccwB = NULL;
|
||||||
|
m_cwB = NULL;
|
||||||
|
m_pointA = NULL;
|
||||||
|
m_pointB = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1009a4c0
|
||||||
|
LegoEdge::~LegoEdge()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1009a4d0
|
||||||
|
LegoEdge* LegoEdge::GetClockwiseEdge(LegoWEEdge* p_face)
|
||||||
|
{
|
||||||
|
if (p_face == m_faceA) {
|
||||||
|
return m_cwA;
|
||||||
|
}
|
||||||
|
else if (p_face == m_faceB) {
|
||||||
|
return m_cwB;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1009a4f0
|
||||||
|
LegoEdge* LegoEdge::GetCounterclockwiseEdge(LegoWEEdge* p_face)
|
||||||
|
{
|
||||||
|
if (p_face == m_faceA) {
|
||||||
|
return m_ccwA;
|
||||||
|
}
|
||||||
|
else if (p_face == m_faceB) {
|
||||||
|
return m_ccwB;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1009a510
|
||||||
|
Vector3* LegoEdge::GetOpposingPoint(LegoWEEdge* p_face)
|
||||||
|
{
|
||||||
|
return p_face == m_faceA ? m_pointB : m_pointA;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1009a530
|
||||||
|
Vector3* LegoEdge::GetPoint(LegoWEEdge* p_face)
|
||||||
|
{
|
||||||
|
return p_face == m_faceB ? m_pointB : m_pointA;
|
||||||
|
}
|
32
LEGO1/lego/sources/geom/legoedge.h
Normal file
32
LEGO1/lego/sources/geom/legoedge.h
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef __LEGOEDGE_H
|
||||||
|
#define __LEGOEDGE_H
|
||||||
|
|
||||||
|
#include "realtime/vector.h"
|
||||||
|
|
||||||
|
class LegoWEEdge;
|
||||||
|
|
||||||
|
// VTABLE: LEGO1 0x100db7b8
|
||||||
|
// SIZE 0x24
|
||||||
|
struct LegoEdge {
|
||||||
|
LegoEdge();
|
||||||
|
virtual ~LegoEdge(); // vtable+0x00
|
||||||
|
|
||||||
|
LegoEdge* GetClockwiseEdge(LegoWEEdge* face);
|
||||||
|
LegoEdge* GetCounterclockwiseEdge(LegoWEEdge* face);
|
||||||
|
Vector3* GetOpposingPoint(LegoWEEdge* face);
|
||||||
|
Vector3* GetPoint(LegoWEEdge* face);
|
||||||
|
|
||||||
|
// SYNTHETIC: LEGO1 0x1009a4a0
|
||||||
|
// LegoEdge::`scalar deleting destructor'
|
||||||
|
|
||||||
|
LegoWEEdge* m_faceA; // 0x04
|
||||||
|
LegoWEEdge* m_faceB; // 0x08
|
||||||
|
LegoEdge* m_ccwA; // 0x0c
|
||||||
|
LegoEdge* m_cwA; // 0x10
|
||||||
|
LegoEdge* m_ccwB; // 0x14
|
||||||
|
LegoEdge* m_cwB; // 0x18
|
||||||
|
Vector3* m_pointA; // 0x1c
|
||||||
|
Vector3* m_pointB; // 0x20
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __LEGOEDGE_H
|
|
@ -1,6 +1,5 @@
|
||||||
#include "legoweedge.h"
|
#include "legoweedge.h"
|
||||||
|
|
||||||
DECOMP_SIZE_ASSERT(Edge, 0x24)
|
|
||||||
DECOMP_SIZE_ASSERT(LegoWEEdge, 0x0c)
|
DECOMP_SIZE_ASSERT(LegoWEEdge, 0x0c)
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1009a550
|
// FUNCTION: LEGO1 0x1009a550
|
||||||
|
@ -22,8 +21,8 @@ LegoWEEdge::~LegoWEEdge()
|
||||||
LegoResult LegoWEEdge::VTable0x04()
|
LegoResult LegoWEEdge::VTable0x04()
|
||||||
{
|
{
|
||||||
for (LegoS32 i = 0; i < m_numEdges; i++) {
|
for (LegoS32 i = 0; i < m_numEdges; i++) {
|
||||||
Edge* e1 = m_edges[i];
|
LegoEdge* e1 = m_edges[i];
|
||||||
Edge* e2 = (m_numEdges - i) == 1 ? m_edges[0] : m_edges[i + 1];
|
LegoEdge* e2 = (m_numEdges - i) == 1 ? m_edges[0] : m_edges[i + 1];
|
||||||
|
|
||||||
if (e2->m_pointA == e1->m_pointA) {
|
if (e2->m_pointA == e1->m_pointA) {
|
||||||
e1->m_faceA = this;
|
e1->m_faceA = this;
|
||||||
|
|
|
@ -2,29 +2,15 @@
|
||||||
#define __LEGOWEEDGE_H
|
#define __LEGOWEEDGE_H
|
||||||
|
|
||||||
#include "decomp.h"
|
#include "decomp.h"
|
||||||
|
#include "legoedge.h"
|
||||||
#include "misc/legotypes.h"
|
#include "misc/legotypes.h"
|
||||||
|
|
||||||
class LegoWEEdge;
|
|
||||||
|
|
||||||
// SIZE 0x24
|
|
||||||
struct Edge {
|
|
||||||
undefined4 m_unk0x00; // 0x00
|
|
||||||
LegoWEEdge* m_faceA; // 0x04
|
|
||||||
LegoWEEdge* m_faceB; // 0x08
|
|
||||||
Edge* m_ccwA; // 0x0c
|
|
||||||
Edge* m_cwA; // 0x10
|
|
||||||
Edge* m_ccwB; // 0x14
|
|
||||||
Edge* m_cwB; // 0x18
|
|
||||||
undefined* m_pointA; // 0x1c
|
|
||||||
undefined* m_pointB; // 0x20
|
|
||||||
};
|
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100db7c0
|
// VTABLE: LEGO1 0x100db7c0
|
||||||
// SIZE 0x0c
|
// SIZE 0x0c
|
||||||
class LegoWEEdge {
|
class LegoWEEdge {
|
||||||
public:
|
public:
|
||||||
LegoWEEdge();
|
LegoWEEdge();
|
||||||
virtual ~LegoWEEdge();
|
virtual ~LegoWEEdge(); // vtable+0x00
|
||||||
|
|
||||||
virtual LegoResult VTable0x04(); // vtable+0x04
|
virtual LegoResult VTable0x04(); // vtable+0x04
|
||||||
|
|
||||||
|
@ -34,8 +20,8 @@ class LegoWEEdge {
|
||||||
// LegoWEEdge::`scalar deleting destructor'
|
// LegoWEEdge::`scalar deleting destructor'
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
LegoU8 m_numEdges; // 0x04
|
LegoU8 m_numEdges; // 0x04
|
||||||
Edge** m_edges; // 0x08
|
LegoEdge** m_edges; // 0x08
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __LEGOWEEDGE_H
|
#endif // __LEGOWEEDGE_H
|
||||||
|
|
Loading…
Reference in a new issue