#ifndef CCOLLISIONMESH_H #define CCOLLISIONMESH_H #include "CCollisionMaterial.h" #include "CResource.h" #include "Core/OpenGL/CVertexBuffer.h" #include "Core/OpenGL/CIndexBuffer.h" #include class CCollisionMesh { friend class CCollisionLoader; class CCollisionOctree { friend class CCollisionLoader; struct SOctreeNode {}; struct SLeaf : public SOctreeNode { CAABox AABox; std::vector FaceIndices; }; struct SBranch : public SOctreeNode { u16 Flags; SOctreeNode *pChildren[8]; }; SOctreeNode* mpRoot; }; class CCollisionVertex { public: u32 MaterialIdx; CVector3f Pos; }; class CCollisionLine { public: u32 MaterialIdx; u16 Vertices[2]; }; class CCollisionFace { public: u32 MaterialIdx; u16 Lines[3]; }; CVertexBuffer mVBO; CIndexBuffer mIBO; u32 mVertexCount; u32 mLineCount; u32 mFaceCount; bool mBuffered; CAABox mAABox; CCollisionOctree *mpOctree; std::vector mMaterials; std::vector mCollisionVertices; std::vector mCollisionLines; std::vector mCollisionFaces; std::vector mMaterialOffsets; bool mOctreeLoaded; CCollisionVertex *GetVertex(u16 Index); CCollisionLine *GetLine(u16 Index); CCollisionFace *GetFace(u16 Index); public: CCollisionMesh(); ~CCollisionMesh(); void BufferGL(); void Draw(); void DrawMaterial(u32 MatIdx); void DrawWireframe(); inline u32 NumMaterials() const { return mMaterials.size(); } inline CCollisionMaterial& GetMaterial(u32 Index) { return mMaterials[Index]; } inline const CAABox& BoundingBox() const { return mAABox; } }; #endif // CCOLLISIONMESH_H