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 _COLLISIONVISITOR_H
5 #define _COLLISIONVISITOR_H
6 /*
7  * Creates a new collision mesh from CollisionGeometry nodes
8  * or the nodes' AABB, when no CGeoms found.
9  */
10 #include "CollMesh.h"
11 #include "NodeVisitor.h"
12 #include "libs.h"
13 
14 namespace SceneGraph {
15 	class Group;
16 	class MatrixTransform;
17 	class StaticGeometry;
18 
19 	class CollisionVisitor : public NodeVisitor {
20 	public:
21 		CollisionVisitor();
22 		virtual void ApplyStaticGeometry(StaticGeometry &);
23 		virtual void ApplyMatrixTransform(MatrixTransform &);
24 		virtual void ApplyCollisionGeometry(CollisionGeometry &);
25 		//call after traversal complete
26 		RefCountedPtr<CollMesh> CreateCollisionMesh();
GetBoundingRadius()27 		float GetBoundingRadius() const { return m_boundingRadius; }
28 
29 	private:
30 		void ApplyDynamicCollisionGeometry(CollisionGeometry &);
31 		void AabbToMesh(const Aabb &);
32 		//geomtree is not built until all nodes are visited and
33 		//BuildCollMesh called
34 		RefCountedPtr<CollMesh> m_collMesh;
35 		std::vector<matrix4x4f> m_matrixStack;
36 		float m_boundingRadius;
37 		bool m_properData;
38 
39 		//temporary arrays for static geometry
40 		std::vector<vector3f> m_vertices;
41 		std::vector<Uint32> m_indices;
42 		std::vector<Uint32> m_flags;
43 
44 		Uint32 m_totalTris;
45 	};
46 } // namespace SceneGraph
47 #endif
48