Voxellancer  0.3
A game about voxels in space
 All Classes Functions Pages
voxeltreenode.h
1 #pragma once
2 
3 #include <set>
4 #include <vector>
5 
6 #include <glm/glm.hpp>
7 
8 #include "geometry/sphere.h"
9 #include "geometry/gridaabb.h"
10 
11 
12 class Voxel;
13 class VoxelTree;
14 
16 {
17 public:
18  VoxelTreeNode(int octIndex, VoxelTree* voxelTree, VoxelTreeNode *parent, const GridAABB& gridAABB);
19  VoxelTreeNode(VoxelTree* voxelTree, const GridAABB& gridAABB, VoxelTreeNode* initialSubnode);
20  ~VoxelTreeNode();
21 
22  int octIndex() const;
23 
24  bool isAtomic() const;
25  bool isVoxel() const;
26  bool isLeaf() const;
27  bool isEmpty() const;
28 
29  std::list<VoxelTreeNode*>& subnodes();
30  const std::list<VoxelTreeNode*>& subnodes() const;
31 
32  Voxel* voxel();
33  const Voxel* voxel() const;
34 
35  VoxelTree* voxelTree();
36 
37  VoxelTreeNode* parent();
38  void setParent(VoxelTreeNode* parent);
39 
40  const GridAABB& gridAABB() const;
41 
42  Sphere& sphere();
43  Sphere& sphere(const Transform& transform);
44 
45  bool active() const;
46  void setActive(bool active);
47 
48  void insert(Voxel* voxel);
49  void remove(Voxel* voxel);
50 
51 
52 protected:
53  int m_octIndex;
54 
55  VoxelTreeNode* m_parent;
56  VoxelTree* m_voxelTree;
57 
58  GridAABB m_gridAABB;
59 
60  Sphere m_sphere;
61  Transform m_cachedSphereTransform;
62 
63  bool m_active;
64 
65  std::vector<VoxelTreeNode*> m_subnodes;
66  std::list<VoxelTreeNode*> m_activeSubnodes;
67 
68  Voxel* m_voxel;
69 
70 
71  void toGroup();
72 
73  void subnodeActivated(VoxelTreeNode* subnode);
74  void subnodeDeactivated(VoxelTreeNode* subnode);
75 
76  VoxelTreeNode* cellSubnode(const glm::ivec3& cell);
77 
78  void calculateSpherePosition(const Transform& transform);
79  void calculateSphereRadius(const Transform& transform);
80 };
81 
Definition: voxeltreenode.h:15
Definition: transform.h:9
Definition: voxel.h:15
Definition: voxeltree.h:9
Definition: gridaabb.h:12
Definition: sphere.h:11