10 #include <Atoms/Globals.h>
11 #include <AtomsCore/Metadata/Metadata.h>
12 #include <AtomsCore/Metadata/MapMetadata.h>
13 #include <AtomsCore/Metadata/StringMetadata.h>
14 #include <Atoms/BehaviourTree/BlackboardValue.h>
28 AtomsPtr<AtomsCore::Metadata> value;
44 size_t addEntry(
const std::string& name, AtomsPtr<AtomsCore::Metadata>& metadata,
short flags = 0);
46 void updateEntry(
const std::string& name, AtomsPtr<AtomsCore::Metadata>& metadata);
50 inline size_t size()
const {
return m_entries.size(); }
52 inline void setParent(
Blackboard* parent) { m_parent = parent; }
55 const Blackboard* parent()
const {
return m_parent; }
59 unsigned int entryType(
const std::string& name)
const;
67 std::vector<BlackboardEntry> m_entries;
80 inline size_t size()
const {
return values.size(); }
82 AtomsPtr<AtomsCore::Metadata>& entry(
size_t index) { assert(values.size() > index);
return values[index]; }
83 const AtomsPtr<AtomsCore::Metadata>& entry(
size_t index)
const { assert(values.size() > index);
return values[index]; }
86 std::vector<AtomsPtr<AtomsCore::Metadata>> values;
94 template <
typename T,
typename M>
97 blackboardValue.position.valueIndex = -1;
98 blackboardValue.position.parentIndex = 0;
102 blackboardValue.value = attrPtr->value();
106 if (properties && blackboard)
108 auto blackboardKey = properties->
getTypedEntry<AtomsCore::StringMetadata>(
"blackboard_key");
109 if (blackboardKey && !blackboardKey->get().empty())
111 auto bbPosition = blackboard->entryPosition(blackboardKey->get());
112 blackboardValue.position = bbPosition;
117 inline void getBlackboardKeyPositionFromAttributes(
const AtomsCore::MapMetadata* attributes, Blackboard* blackboard,
const std::string& attributeName, BlackboardValue<std::string>& blackboardValue)
119 blackboardValue.position.valueIndex = -1;
120 blackboardValue.position.parentIndex = 0;
121 auto attrPtr = attributes->
getTypedEntry<AtomsCore::StringMetadata>(attributeName);
124 auto bbPosition = blackboard->entryPosition(attrPtr->get());
125 blackboardValue.position = bbPosition;
129 if (properties && blackboard)
131 auto blackboardKey = properties->
getTypedEntry<AtomsCore::StringMetadata>(
"blackboard_key");
132 if (blackboardKey && !blackboardKey->get().empty())
134 auto bbPosition = blackboard->entryPosition(blackboardKey->get());
135 blackboardValue.position = bbPosition;
141 inline void getBlackboardValueFromAttributes<AtomsCore::Metadata, AtomsPtr<AtomsCore::Metadata>>(
const AtomsCore::MapMetadata* attributes, Blackboard* blackboard,
const std::string& attributeName, BlackboardMetadataValue& blackboardValue)
143 blackboardValue.position.valueIndex = -1;
144 blackboardValue.position.parentIndex = 0;
145 auto attrPtr = attributes->getEntry(attributeName);
148 blackboardValue.value = attrPtr->clone();
152 if (properties && blackboard)
154 auto blackboardKey = properties->
getTypedEntry<AtomsCore::StringMetadata>(
"blackboard_key");
155 if (blackboardKey && !blackboardKey->get().empty())
157 auto bbPosition = blackboard->entryPosition(blackboardKey->get());
158 blackboardValue.position = bbPosition;