The BehaviorTreeFactory is used to create instances of a TreeNode at run-time. More...
#include <bt_factory.h>
Public Member Functions | |
BehaviorTreeFactory () | |
const std::unordered_map< std::string, NodeBuilder > & | builders () const |
All the builders. Made available mostly for debug purposes. More... | |
const std::set< std::string > & | builtinNodes () const |
List of builtin IDs. More... | |
Tree | createTreeFromFile (const std::string &file_path, Blackboard::Ptr blackboard=Blackboard::create()) |
Tree | createTreeFromText (const std::string &text, Blackboard::Ptr blackboard=Blackboard::create()) |
std::unique_ptr< TreeNode > | instantiateTreeNode (const std::string &name, const std::string &ID, const NodeConfiguration &config) const |
instantiateTreeNode creates an instance of a previously registered TreeNode. More... | |
const std::unordered_map< std::string, TreeNodeManifest > & | manifests () const |
Manifests of all the registered TreeNodes. More... | |
void | registerBuilder (const TreeNodeManifest &manifest, const NodeBuilder &builder) |
The most generic way to register your own builder. More... | |
template<typename T > | |
void | registerBuilder (const std::string &ID, const NodeBuilder &builder) |
void | registerFromPlugin (const std::string &file_path) |
registerFromPlugin load a shared library and execute the function BT_REGISTER_NODES (see macro). More... | |
template<typename T > | |
void | registerNodeType (const std::string &ID) |
void | registerSimpleAction (const std::string &ID, const SimpleActionNode::TickFunctor &tick_functor, PortsList ports={}) |
registerSimpleAction help you register nodes of type SimpleActionNode. More... | |
void | registerSimpleCondition (const std::string &ID, const SimpleConditionNode::TickFunctor &tick_functor, PortsList ports={}) |
registerSimpleCondition help you register nodes of type SimpleConditionNode. More... | |
void | registerSimpleDecorator (const std::string &ID, const SimpleDecoratorNode::TickFunctor &tick_functor, PortsList ports={}) |
registerSimpleDecorator help you register nodes of type SimpleDecoratorNode. More... | |
bool | unregisterBuilder (const std::string &ID) |
Remove a registered ID. More... | |
Static Public Member Functions | |
template<typename T > | |
static TreeNodeManifest | buildManifest (const std::string &ID) |
Private Types | |
template<typename T > | |
using | has_default_constructor = typename std::is_constructible< T, const std::string & > |
template<typename T > | |
using | has_params_constructor = typename std::is_constructible< T, const std::string &, const NodeConfiguration & > |
Private Member Functions | |
template<typename T > | |
void | registerNodeTypeImpl (const std::string &ID) |
Static Private Member Functions | |
template<typename T > | |
static NodeBuilder | getBuilder (typename std::enable_if< has_default_constructor< T >::value &&has_params_constructor< T >::value >::type *=nullptr) |
template<typename T > | |
static NodeBuilder | getBuilder (typename std::enable_if<!has_default_constructor< T >::value &&has_params_constructor< T >::value >::type *=nullptr) |
template<typename T > | |
static NodeBuilder | getBuilder (typename std::enable_if< has_default_constructor< T >::value &&!has_params_constructor< T >::value >::type *=nullptr) |
Private Attributes | |
std::unordered_map< std::string, NodeBuilder > | builders_ |
std::set< std::string > | builtin_IDs_ |
std::unordered_map< std::string, TreeNodeManifest > | manifests_ |
The BehaviorTreeFactory is used to create instances of a TreeNode at run-time.
Some node types are "builtin", whilst other are used defined and need to be registered using a unique ID.
Definition at line 98 of file bt_factory.h.
|
private |
Definition at line 240 of file bt_factory.h.
|
private |
Definition at line 243 of file bt_factory.h.
BT::BehaviorTreeFactory::BehaviorTreeFactory | ( | ) |
Definition at line 19 of file bt_factory.cpp.
const std::unordered_map< std::string, NodeBuilder > & BT::BehaviorTreeFactory::builders | ( | ) | const |
All the builders. Made available mostly for debug purposes.
Definition at line 155 of file bt_factory.cpp.
|
inlinestatic |
Definition at line 226 of file bt_factory.h.
const std::set< std::string > & BT::BehaviorTreeFactory::builtinNodes | ( | ) | const |
List of builtin IDs.
Definition at line 165 of file bt_factory.cpp.
Tree BT::BehaviorTreeFactory::createTreeFromFile | ( | const std::string & | file_path, |
Blackboard::Ptr | blackboard = Blackboard::create() |
||
) |
Definition at line 180 of file bt_factory.cpp.
Tree BT::BehaviorTreeFactory::createTreeFromText | ( | const std::string & | text, |
Blackboard::Ptr | blackboard = Blackboard::create() |
||
) |
Definition at line 170 of file bt_factory.cpp.
|
inlinestaticprivate |
Definition at line 253 of file bt_factory.h.
|
inlinestaticprivate |
Definition at line 272 of file bt_factory.h.
|
inlinestaticprivate |
Definition at line 282 of file bt_factory.h.
std::unique_ptr< TreeNode > BT::BehaviorTreeFactory::instantiateTreeNode | ( | const std::string & | name, |
const std::string & | ID, | ||
const NodeConfiguration & | config | ||
) | const |
instantiateTreeNode creates an instance of a previously registered TreeNode.
name | name of this particular instance |
ID | ID used when it was registered |
config | configuration that is passed to the constructor of the TreeNode. |
Definition at line 134 of file bt_factory.cpp.
const std::unordered_map< std::string, TreeNodeManifest > & BT::BehaviorTreeFactory::manifests | ( | ) | const |
Manifests of all the registered TreeNodes.
Definition at line 160 of file bt_factory.cpp.
void BT::BehaviorTreeFactory::registerBuilder | ( | const TreeNodeManifest & | manifest, |
const NodeBuilder & | builder | ||
) |
The most generic way to register your own builder.
Definition at line 68 of file bt_factory.cpp.
|
inline |
Definition at line 110 of file bt_factory.h.
void BT::BehaviorTreeFactory::registerFromPlugin | ( | const std::string & | file_path | ) |
registerFromPlugin load a shared library and execute the function BT_REGISTER_NODES (see macro).
file_path | path of the file |
Definition at line 116 of file bt_factory.cpp.
|
inline |
registerNodeType is the method to use to register your custom TreeNode.
It accepts only classed derived from either ActionNodeBase, DecoratorNode, ControlNode or ConditionNode.
Definition at line 174 of file bt_factory.h.
|
inlineprivate |
Definition at line 246 of file bt_factory.h.
void BT::BehaviorTreeFactory::registerSimpleAction | ( | const std::string & | ID, |
const SimpleActionNode::TickFunctor & | tick_functor, | ||
PortsList | ports = {} |
||
) |
registerSimpleAction help you register nodes of type SimpleActionNode.
ID | registration ID |
tick_functor | the callback to be invoked in the tick() method. |
ports | if your SimpleNode requires ports, provide the list here. |
Definition at line 92 of file bt_factory.cpp.
void BT::BehaviorTreeFactory::registerSimpleCondition | ( | const std::string & | ID, |
const SimpleConditionNode::TickFunctor & | tick_functor, | ||
PortsList | ports = {} |
||
) |
registerSimpleCondition help you register nodes of type SimpleConditionNode.
ID | registration ID |
tick_functor | the callback to be invoked in the tick() method. |
ports | if your SimpleNode requires ports, provide the list here. |
Definition at line 80 of file bt_factory.cpp.
void BT::BehaviorTreeFactory::registerSimpleDecorator | ( | const std::string & | ID, |
const SimpleDecoratorNode::TickFunctor & | tick_functor, | ||
PortsList | ports = {} |
||
) |
registerSimpleDecorator help you register nodes of type SimpleDecoratorNode.
ID | registration ID |
tick_functor | the callback to be invoked in the tick() method. |
ports | if your SimpleNode requires ports, provide the list here. |
Definition at line 104 of file bt_factory.cpp.
bool BT::BehaviorTreeFactory::unregisterBuilder | ( | const std::string & | ID | ) |
Remove a registered ID.
Definition at line 52 of file bt_factory.cpp.
|
private |
Definition at line 232 of file bt_factory.h.
|
private |
Definition at line 234 of file bt_factory.h.
|
private |
Definition at line 233 of file bt_factory.h.