Pioneer
CollisionVisitor.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 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:
22  virtual void ApplyStaticGeometry(StaticGeometry &);
23  virtual void ApplyMatrixTransform(MatrixTransform &);
25  //call after traversal complete
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
Definition: CollisionGeometry.h:22
Definition: CollisionVisitor.h:19
float GetBoundingRadius() const
Definition: CollisionVisitor.h:27
virtual void ApplyStaticGeometry(StaticGeometry &)
Definition: CollisionVisitor.cpp:23
RefCountedPtr< CollMesh > CreateCollisionMesh()
Definition: CollisionVisitor.cpp:162
CollisionVisitor()
Definition: CollisionVisitor.cpp:13
virtual void ApplyMatrixTransform(MatrixTransform &)
Definition: CollisionVisitor.cpp:38
virtual void ApplyCollisionGeometry(CollisionGeometry &)
Definition: CollisionVisitor.cpp:49
Definition: MatrixTransform.h:24
Definition: NodeVisitor.h:26
Definition: StaticGeometry.h:19
Definition: CityOnPlanet.h:31
Definition: Aabb.h:9