13 result.
error =
"TreeInit is null";
17 if (!tree_init->tree_id()) {
18 result.
error =
"TreeInit missing tree_id";
22 if (!tree_init->root()) {
23 result.
error =
"TreeInit missing root node";
27 std::string treeName = tree_init->tree_name() ? tree_init->tree_name()->str() : tree_init->tree_id()->str();
29 auto tree = std::make_shared<EmberCore::BehaviorTree>(treeName);
31 tree->SetMetadata(
"tree_id", tree_init->tree_id()->str());
33 auto rootNode =
BuildNode(tree_init->root());
35 result.
error =
"Failed to build root node";
39 tree->SetRootNode(std::move(rootNode));
41 if (tree_init->blackboards()) {
45 if (tree_init->metadata()) {
46 for (
const auto *kv : *tree_init->metadata()) {
48 std::string value = kv->value() ? kv->value()->str() :
"";
49 tree->SetMetadata(kv->key()->str(), value);
66 std::string name = def->name() ? def->name()->str() :
"Unnamed";
69 auto node = std::make_unique<EmberCore::Node>(name, nodeType);
73 node->SetAttribute(
"subtype", def->subtype()->str());
76 if (def->description()) {
77 node->SetAttribute(
"description", def->description()->str());
80 node->SetAttribute(
"tcp_node_id", std::to_string(def->id()));
82 if (def->attributes()) {
83 for (
const auto *kv : *def->attributes()) {
85 std::string value = kv->value() ? kv->value()->str() :
"";
86 node->SetAttribute(kv->key()->str(), value);
91 if (def->children()) {
92 for (
const auto *childDef : *def->children()) {
95 node->AddChild(std::move(childNode));
105 const flatbuffers::Vector<flatbuffers::Offset<Protocol::BlackboardDefinition>> *blackboards) {
106 if (!tree || !blackboards) {
110 for (
const auto *bbDef : *blackboards) {
111 if (!bbDef || !bbDef->id()) {
115 auto blackboard = std::make_unique<EmberCore::Blackboard>(bbDef->id()->str());
117 if (bbDef->entries()) {
118 for (
const auto *entryDef : *bbDef->entries()) {
119 if (!entryDef || !entryDef->key()) {
123 std::string key = entryDef->key()->str();
124 std::string typeStr = entryDef->value_type() ? entryDef->value_type()->str() :
"STRING";
125 std::string value = entryDef->value() ? entryDef->value()->str() :
"";
129 blackboard->AddEntry(key, dataType, value);
static DataType ParseDataType(const EmberCore::String &typeStr)
DataType
Supported data types for blackboard entries.