1 // Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details 2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt 3 4 #ifndef _COLLMESH_H 5 #define _COLLMESH_H 6 7 #include "Aabb.h" 8 #include "RefCounted.h" 9 10 class GeomTree; 11 12 namespace Serializer { 13 class Writer; 14 class Reader; 15 } // namespace Serializer 16 17 //This simply stores the collision GeomTrees 18 //and AABB. 19 class CollMesh : public RefCounted { 20 public: CollMesh()21 CollMesh() : 22 m_geomTree(0), 23 m_totalTris(0) 24 {} 25 virtual ~CollMesh(); 26 GetAabb()27 inline Aabb &GetAabb() { return m_aabb; } 28 GetRadius()29 inline double GetRadius() const { return m_aabb.GetRadius(); } SetRadius(double v)30 inline void SetRadius(double v) 31 { 32 //0 radius = trouble 33 m_aabb.radius = std::max(v, 0.1); 34 } 35 36 const std::vector<vector3f> &GetGeomTreeVertices() const; 37 const Uint32 *GetGeomTreeIndices() const; 38 const unsigned int *GetGeomTreeTriFlags() const; 39 unsigned int GetGeomTreeNumTris() const; 40 GetGeomTree()41 inline GeomTree *GetGeomTree() const { return m_geomTree; } 42 SetGeomTree(GeomTree * t)43 inline void SetGeomTree(GeomTree *t) 44 { 45 assert(t); 46 m_geomTree = t; 47 } 48 GetDynGeomTrees()49 inline const std::vector<GeomTree *> &GetDynGeomTrees() const { return m_dynGeomTrees; } AddDynGeomTree(GeomTree * t)50 inline void AddDynGeomTree(GeomTree *t) 51 { 52 assert(t); 53 m_dynGeomTrees.push_back(t); 54 } 55 56 //for statistics GetNumTriangles()57 inline unsigned int GetNumTriangles() const { return m_totalTris; } SetNumTriangles(unsigned int i)58 inline void SetNumTriangles(unsigned int i) { m_totalTris = i; } 59 60 void Save(Serializer::Writer &wr) const; 61 void Load(Serializer::Reader &rd); 62 63 protected: 64 Aabb m_aabb; 65 GeomTree *m_geomTree; 66 std::vector<GeomTree *> m_dynGeomTrees; 67 unsigned int m_totalTris; 68 }; 69 70 #endif 71