![]() |
Gamedev Framework (gf)
0.7.0
A C++14 framework for 2D games
|
Binary space random partionning tree. More...
#include <gf/SpaceTree.h>
Public Types | |
using | Callback = std::function< bool(const SpaceTree &)> |
A callback function for traversing the tree. More... | |
Public Member Functions | |
SpaceTree (const RectI &area) | |
Constructor. More... | |
const RectI & | getArea () const |
Get the area of the node. More... | |
int | getLevel () const |
Get the level of the node in the tree. More... | |
void | removeChildren () |
Remove the children of the node. More... | |
bool | splitOnce (Random &random, Vector2i minSize, float maxRatio=1.5f) |
Split the node once. More... | |
void | splitRecursive (Random &random, int levelMax, Vector2i minSize, Vector2i maxSize, float maxRatio=1.5f) |
Split a node recursively. More... | |
bool | isLeaf () const |
Check if a node is a leaf. More... | |
const SpaceTree * | getLeftChild () const |
Get the left child. More... | |
SpaceTree * | getLeftChild () |
Get the left child. More... | |
const SpaceTree * | getRightChild () const |
Get the right child. More... | |
SpaceTree * | getRightChild () |
Get the right child. More... | |
const SpaceTree * | getFather () const |
Get the father of the node. More... | |
SpaceTree * | getFather () |
Get the father of the node. More... | |
bool | contains (Vector2i position) const |
Check if the area of the node contains a position. More... | |
const SpaceTree * | find (Vector2i position) const |
Find the deepest node containing a position. More... | |
bool | traversePreOrder (Callback callback) const |
Traverse the nodes in pre-order. More... | |
bool | traverseInOrder (Callback callback) const |
Traverse the nodes in in-order. More... | |
bool | traversePostOrder (Callback callback) const |
Traverse the nodes in post-order. More... | |
bool | traverseLevelOrder (Callback callback) const |
Traverse the nodes in level-order. More... | |
bool | traverseInvertedLevelOrder (Callback callback) const |
Traverse the nodes in inverted level-order. More... | |
Binary space random partionning tree.
This class implements a random binary space partitioning tree. More precisely, this class is a node in the tree.
using gf::SpaceTree::Callback = std::function<bool(const SpaceTree&)> |
A callback function for traversing the tree.
The function returns a boolean indicating if the traversal can continue.
gf::SpaceTree::SpaceTree | ( | const RectI & | area | ) |
Constructor.
area | The area to split for this node |
bool gf::SpaceTree::contains | ( | Vector2i | position | ) | const |
Check if the area of the node contains a position.
position | The position to check |
Find the deepest node containing a position.
position | The position to find |
nullptr
if the position is outside the tree
|
inline |
Get the area of the node.
|
inline |
Get the father of the node.
The root of the tree has no father.
|
inline |
Get the father of the node.
The root of the tree has no father.
|
inline |
Get the left child.
nullptr
|
inline |
Get the left child.
nullptr
|
inline |
Get the level of the node in the tree.
The root of the tree is at level 0, its children at level 1, etc.
|
inline |
Get the right child.
nullptr
|
inline |
Get the right child.
nullptr
|
inline |
Check if a node is a leaf.
A leaf has no children.
void gf::SpaceTree::removeChildren | ( | ) |
Remove the children of the node.
Split the node once.
This function may create two children if the conditions are met.
random | A random generator |
minSize | The minimum size under which a node cannot be split |
maxRatio | The maximum ratio between the width and height |
void gf::SpaceTree::splitRecursive | ( | Random & | random, |
int | levelMax, | ||
Vector2i | minSize, | ||
Vector2i | maxSize, | ||
float | maxRatio = 1.5f |
||
) |
Split a node recursively.
random | A random generator |
levelMax | The maximum level of a node |
minSize | The minimum size under which a node cannot be split |
maxSize | The maximum size over which a node must be split |
maxRatio | The maximum ratio between the width and height |
bool gf::SpaceTree::traverseInOrder | ( | Callback | callback | ) | const |
Traverse the nodes in in-order.
callback | A function to call on each node |
bool gf::SpaceTree::traverseInvertedLevelOrder | ( | Callback | callback | ) | const |
Traverse the nodes in inverted level-order.
callback | A function to call on each node |
bool gf::SpaceTree::traverseLevelOrder | ( | Callback | callback | ) | const |
Traverse the nodes in level-order.
Level-order is also known as breadth first search
callback | A function to call on each node |
bool gf::SpaceTree::traversePostOrder | ( | Callback | callback | ) | const |
Traverse the nodes in post-order.
callback | A function to call on each node |
bool gf::SpaceTree::traversePreOrder | ( | Callback | callback | ) | const |
Traverse the nodes in pre-order.
callback | A function to call on each node |