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