forked from BehaviorTree/btcpp_sample
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathselect_points.cpp
More file actions
87 lines (72 loc) · 2.08 KB
/
select_points.cpp
File metadata and controls
87 lines (72 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "select_points.h"
#include "behaviortree_cpp/bt_factory.h"
using namespace BT;
static const char* xml_text = R"(
<root BTCPP_format="4">
<BehaviorTree ID="MainTree">
<Repeat num_cycles="3">
<Sequence>
<Fallback>
<isPointSelected/>
<SelectPoints />
</Fallback>
<LoopPoints />
<SelectPoints />
</Sequence>
</Repeat>
</BehaviorTree>
</root>
)";
NodeStatus SelectPoints::isPointSelected()
{
if (_selected)
{
std::cout << "Points are selected." << std::endl;
return NodeStatus::SUCCESS;
}
else
{
std::cout << "Points are not selected." << std::endl;
return NodeStatus::FAILURE;
}
}
NodeStatus SelectPoints::selectPoints()
{
for (int i = 0; i < 10; i++)
{
_points->push_back(Point{double(i), double(i+1), double(i+2)});
}
_selected = true;
return NodeStatus::SUCCESS;
}
NodeStatus SelectPoints::loopPoints()
{
for (Point point : *_points)
{
std::cout << "Point: " << point.x << ", " << point.y << ", " << point.z << std::endl;
}
_selected = false;
return NodeStatus::SUCCESS;
}
void SelectPoints::registerNodes(BT::BehaviorTreeFactory& factory)
{
factory.registerSimpleCondition("isPointSelected", std::bind(&SelectPoints::isPointSelected, this));
factory.registerSimpleAction("SelectPoints", std::bind(&SelectPoints::selectPoints, this));
factory.registerSimpleAction("LoopPoints", std::bind(&SelectPoints::loopPoints, this));
}
int main()
{
BT::BehaviorTreeFactory factory;
SelectPoints select_points;
select_points.registerNodes(factory);
// In this example a single XML contains multiple <BehaviorTree>
// To determine which one is the "main one", we should first register
// the XML and then allocate a specific tree, using its ID
factory.registerBehaviorTreeFromText(xml_text);
auto tree = factory.createTree("MainTree");
// helper function to print the tree
// BT::printTreeRecursively(tree.rootNode());
// Tick multiple times, until either FAILURE of SUCCESS is returned
tree.tickWhileRunning();
return 0;
}