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