Files
tww/include/SSystem/SComponent/c_m3d_g_tri.h
T
2025-03-07 17:40:54 -05:00

69 lines
1.9 KiB
C++

#ifndef C_M3D_G_TRI_H_
#define C_M3D_G_TRI_H_
#include "SSystem/SComponent/c_m3d_g_pla.h"
#include "dolphin/types.h"
class cM3dGCyl;
struct cM3dGTriS {
Vec a;
Vec b;
Vec c;
};
class cM3dGTri : public cM3dGPla {
public:
/* 0x00 */ /* cM3dGPla */
/* 0x14 */ Vec mA;
/* 0x20 */ Vec mB;
/* 0x2C */ Vec mC;
public:
cM3dGTri() {}
cM3dGTri(const Vec *pA, const Vec *pB, const Vec *pC);
bool cross(const cM3dGCyl* cyl, Vec* out) const;
bool cross(const cM3dGLin* line, Vec* vec, bool param_3, bool param_4) const {
return cM3d_Cross_LinTri(line, this, vec, param_3, param_4);
}
bool Cross(const cM3dGCps& cps, Vec* out) const { return cM3d_Cross_CpsTri(cps, *this, out); }
bool Cross(const cM3dGCyl& cyl, Vec* out) const { return cross(&cyl, out); }
bool Cross(const cM3dGSph& sph, Vec* out) const { return cM3d_Cross_SphTri(&sph, this, out); }
bool Cross(const cM3dGTri& tri, Vec* out) const { return cM3d_Cross_TriTri(tri, *this, out); }
bool crossX(const Vec* pos, f32* pcross_len) const { return cM3d_CrossX_Tri(this, pos, pcross_len); }
bool crossY(const Vec* pos) const { return cM3d_CrossY_Tri(this, pos); }
bool crossZ(const Vec* pos, f32* pcross_len) const { return cM3d_CrossZ_Tri(this, pos, pcross_len); }
void Up(f32 dist) {
Vec delta;
VECScale(&mNormal, &delta, dist);
VECAdd(&mA, &delta, &mA);
VECAdd(&mB, &delta, &mB);
VECAdd(&mC, &delta, &mC);
mD -= dist;
}
void setBg(const Vec* a, const Vec* b, const Vec* c, const cM3dGPla* pla) {
mA = *a;
mB = *b;
mC = *c;
Set(pla);
}
void setPos(const Vec* a, const Vec* b, const Vec* c) {
mA = *a;
mB = *b;
mC = *c;
setUp();
}
void setUp() {
SetupFrom3Vtx(&mA, &mB, &mC);
}
virtual ~cM3dGTri() {}
}; // Size: 0x38
#endif