#ifndef __URDE_COBBTREE_HPP__ #define __URDE_COBBTREE_HPP__ #include "RetroTypes.hpp" #include "CCollisionEdge.hpp" #include "zeus/CVector3f.hpp" #include "zeus/COBBox.hpp" namespace urde { class COBBTree { public: struct SIndexData { std::vector x0_; std::vector x10_; std::vector x20_; std::vector x30_; std::vector x40_; std::vector x50_; std::vector x60_; SIndexData()=default; SIndexData(CInputStream&); }; class CLeafData { std::vector x0_surface; public: CLeafData()=default; CLeafData(const std::vector&); CLeafData(CInputStream&); const std::vector& GetSurfaceVector() const; size_t GetMemoryUsage() const; }; class CNode { zeus::COBBox x0_obb; bool x3c_isLeaf = false; std::unique_ptr x40_left; std::unique_ptr x44_right; std::unique_ptr x48_leaf; 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; size_t GetMemoryUsage() const; }; private: u32 x0_magic = 0; u32 x4_version = 0; u32 x8_memsize = 0; /* CSimpleAllocator xc_ We're not using this but lets keep track*/ SIndexData x18_indexData; std::unique_ptr x88_root; public: COBBTree()=default; COBBTree(const COBBTree::SIndexData&, const CNode*); COBBTree(CInputStream&); zeus::CAABox CalculateLocalAABox() const; zeus::CAABox CalculateAABox(const zeus::CTransform&) const; }; } #endif // __URDE_COBBTREE_HPP__