Pioneer
CollisionGeometry.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 _SCENEGRAPH_COLLISIONGEOMETRY_H
5 #define _SCENEGRAPH_COLLISIONGEOMETRY_H
6 
7 /*
8  * Non-renderable geometry node which CollisionVisitor can use
9  * to build a collision mesh.
10  */
11 
12 #include "Node.h"
13 
14 namespace Graphics {
15  class Surface;
16 }
17 
18 class GeomTree;
19 class Geom;
20 
21 namespace SceneGraph {
22  class CollisionGeometry : public Node {
23  public:
24  CollisionGeometry(Graphics::Renderer *r, const std::vector<vector3f> &, const std::vector<Uint32> &, unsigned int flag);
26  virtual Node *Clone(NodeCopyCache *cache = 0) override;
27  virtual const char *GetTypeName() const override { return "CollisionGeometry"; }
28  virtual void Accept(NodeVisitor &nv) override;
29  virtual void Save(NodeDatabase &) override;
31 
32  const std::vector<vector3f> &GetVertices() const { return m_vertices; }
33  const std::vector<Uint32> &GetIndices() const { return m_indices; }
34  unsigned int GetTriFlag() const { return m_triFlag; }
35 
36  bool IsDynamic() const { return m_dynamic; }
37  void SetDynamic(bool b) { m_dynamic = b; }
38 
39  //for linking game collision objects with these nodes
40  GeomTree *GetGeomTree() const { return m_geomTree; }
41  void SetGeomTree(GeomTree *c) { m_geomTree = c; }
42 
43  Geom *GetGeom() const { return m_geom; }
44  void SetGeom(Geom *g) { m_geom = g; }
45 
46  protected:
48 
49  private:
50  void CopyData(const std::vector<vector3f> &, const std::vector<Uint32> &);
51  std::vector<vector3f> m_vertices;
52  std::vector<Uint32> m_indices;
53  unsigned int m_triFlag; //only one per node
54  bool m_dynamic;
55 
56  //for dynamic collisions
57  GeomTree *m_geomTree;
58  Geom *m_geom;
59  };
60 } // namespace SceneGraph
61 
62 #endif
Definition: GeomTree.h:23
Definition: Geom.h:16
Definition: Renderer.h:44
Definition: CollisionGeometry.h:22
GeomTree * GetGeomTree() const
Definition: CollisionGeometry.h:40
virtual Node * Clone(NodeCopyCache *cache=0) override
Definition: CollisionGeometry.cpp:39
static CollisionGeometry * Load(NodeDatabase &)
Definition: CollisionGeometry.cpp:70
CollisionGeometry(Graphics::Renderer *r, const std::vector< vector3f > &, const std::vector< Uint32 > &, unsigned int flag)
Definition: CollisionGeometry.cpp:12
~CollisionGeometry()
Definition: CollisionGeometry.cpp:35
const std::vector< vector3f > & GetVertices() const
Definition: CollisionGeometry.h:32
virtual const char * GetTypeName() const override
Definition: CollisionGeometry.h:27
const std::vector< Uint32 > & GetIndices() const
Definition: CollisionGeometry.h:33
void SetGeomTree(GeomTree *c)
Definition: CollisionGeometry.h:41
bool IsDynamic() const
Definition: CollisionGeometry.h:36
Geom * GetGeom() const
Definition: CollisionGeometry.h:43
unsigned int GetTriFlag() const
Definition: CollisionGeometry.h:34
virtual void Accept(NodeVisitor &nv) override
Definition: CollisionGeometry.cpp:50
void SetDynamic(bool b)
Definition: CollisionGeometry.h:37
virtual void Save(NodeDatabase &) override
Definition: CollisionGeometry.cpp:56
void SetGeom(Geom *g)
Definition: CollisionGeometry.h:44
Definition: NodeCopyCache.h:14
Definition: NodeVisitor.h:26
Definition: Node.h:72
Definition: Background.h:14
Definition: CityOnPlanet.h:31
Definition: Weld.h:10
Definition: Node.h:63