mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 09:47:43 +00:00
Implement CCollidableOBBTree
This commit is contained in:
@@ -8,6 +8,8 @@
|
||||
|
||||
namespace urde
|
||||
{
|
||||
class CCollidableOBBTreeGroupContainer;
|
||||
|
||||
class COBBTree
|
||||
{
|
||||
public:
|
||||
@@ -43,19 +45,21 @@ public:
|
||||
std::unique_ptr<CNode> x40_left;
|
||||
std::unique_ptr<CNode> x44_right;
|
||||
std::unique_ptr<CLeafData> x48_leaf;
|
||||
bool x4c_hit;
|
||||
public:
|
||||
CNode() = default;
|
||||
CNode(const CNode&)=default;
|
||||
CNode(const zeus::CTransform&, const zeus::CVector3f&, const CNode*, const CNode*, const CLeafData*);
|
||||
CNode(CInputStream&);
|
||||
|
||||
bool WasHit() const;
|
||||
void SetHit(bool) const;
|
||||
CNode* GetLeft() const;
|
||||
CNode* GetRight() const;
|
||||
CLeafData* GetLeafData() const;
|
||||
const zeus::COBBox& GetOBB() const;
|
||||
bool WasHit() const { return x4c_hit; }
|
||||
void SetHit(bool h) { x4c_hit = h; }
|
||||
const CNode& GetLeft() const { return *x40_left; }
|
||||
const CNode& GetRight() const { return *x44_right; }
|
||||
const CLeafData& GetLeafData() const { return *x48_leaf; }
|
||||
const zeus::COBBox& GetOBB() const { return x0_obb; }
|
||||
size_t GetMemoryUsage() const;
|
||||
bool IsLeaf() const { return x3c_isLeaf; }
|
||||
};
|
||||
|
||||
private:
|
||||
@@ -71,9 +75,19 @@ public:
|
||||
COBBTree(const COBBTree::SIndexData&, const CNode*);
|
||||
COBBTree(CInputStream&);
|
||||
|
||||
CCollisionSurface GetSurface(u16) const;
|
||||
static std::unique_ptr<CCollidableOBBTreeGroupContainer>
|
||||
BuildOrientedBoundingBoxTree(const zeus::CVector3f&, const zeus::CVector3f&);
|
||||
CCollisionSurface GetSurface(u16 idx) const;
|
||||
const u16* GetTriangleEdgeIndices(u16 idx) const { return &x18_indexData.x50_surfaceIndices[idx * 3]; }
|
||||
void GetTriangleVertexIndices(u16 idx, u16 indicesOut[3]) const;
|
||||
const CCollisionEdge& GetEdge(int idx) const { return x18_indexData.x40_edges[idx]; }
|
||||
const zeus::CVector3f& GetVert(int idx) const { return x18_indexData.x60_vertices[idx]; }
|
||||
u32 GetVertMaterial(u16 idx) const { return x18_indexData.x0_materials[x18_indexData.x10_vertMaterials[idx]]; }
|
||||
u32 GetEdgeMaterial(u16 idx) const { return x18_indexData.x0_materials[x18_indexData.x20_edgeMaterials[idx]]; }
|
||||
CCollisionSurface GetTransformedSurface(u16 idx, const zeus::CTransform& xf) const;
|
||||
zeus::CAABox CalculateLocalAABox() const;
|
||||
zeus::CAABox CalculateAABox(const zeus::CTransform&) const;
|
||||
const CNode& GetRoot() const { return *x88_root; }
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user