Ember
Loading...
Searching...
No Matches
TCPTreeAdapter.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <unordered_map>
5
7#include "Core/BehaviorTree.h"
10
11namespace Ember {
12namespace Network {
13
15 public:
17
18 TCPTreeAdapter(std::shared_ptr<EmberCore::BehaviorTree> tree, std::shared_ptr<StateManager> state_manager);
19 ~TCPTreeAdapter() override = default;
20
21 EmberCore::ITreeNode *GetRootNode() const override;
22 bool HasRootNode() const override { return m_tree && m_tree->HasRootNode(); }
23
24 const EmberCore::String &GetName() const override;
25 const EmberCore::String &GetDescription() const override;
26
27 size_t GetNodeCount() const override;
28 size_t GetMaxDepth() const override;
29
30 EmberCore::ITreeNode *FindNodeById(size_t id) const override;
31 EmberCore::ITreeNode *FindNodeByName(const EmberCore::String &name) const override;
32 std::vector<EmberCore::ITreeNode *> FindNodesByType(EmberCore::ITreeNode::NodeType type) const override;
33
34 void TraverseNodes(std::function<void(EmberCore::ITreeNode *)> visitor) override;
35 void TraverseNodes(std::function<void(const EmberCore::ITreeNode *)> visitor) const override;
36
37 bool IsValid() const override;
38 bool HasCycles() const override;
39
40 std::vector<EmberCore::ITreeNode *> GetAllNodes() override;
41 std::vector<const EmberCore::ITreeNode *> GetAllNodes() const override;
42
43 EmberCore::String GetTreeStructure() const override;
44 void PrintTree() const override;
45
46 NodeStatus GetNodeStatus(size_t node_id) const;
47 bool IsNodeInExecutionPath(size_t node_id) const;
48 int64_t GetCurrentTick() const;
49
50 std::shared_ptr<StateManager> GetStateManager() { return m_stateManager; }
51 std::shared_ptr<const StateManager> GetStateManager() const { return m_stateManager; }
52
53 std::shared_ptr<EmberCore::BehaviorTree> GetBehaviorTree() { return m_tree; }
54 std::shared_ptr<const EmberCore::BehaviorTree> GetBehaviorTree() const { return m_tree; }
55
56 private:
58 void BuildAdapterCache() const;
59
60 std::shared_ptr<EmberCore::BehaviorTree> m_tree;
61 std::shared_ptr<StateManager> m_stateManager;
62
63 mutable std::unordered_map<size_t, std::unique_ptr<EmberCore::NodeAdapter>> m_adapters;
65 mutable bool m_adapterCacheBuilt = false;
66};
67
68} // namespace Network
69} // namespace Ember
Abstract interface for tree nodes that can be visualized.
Definition ITreeNode.h:31
NodeType
Node types for visualization categorization.
Definition ITreeNode.h:36
Abstract interface for tree structures that can be visualized.
Adapter class that wraps the current Node implementation to work with ITreeNode interface.
Definition NodeAdapter.h:16
Represents a node in a behavior tree structure.
Definition Node.h:20
const EmberCore::String & GetName() const override
std::shared_ptr< EmberCore::BehaviorTree > GetBehaviorTree()
size_t GetNodeCount() const override
TCPTreeAdapter(std::shared_ptr< EmberCore::BehaviorTree > tree, std::shared_ptr< StateManager > state_manager)
const EmberCore::String & GetDescription() const override
EmberCore::NodeAdapter * GetOrCreateAdapter(EmberCore::Node *node) const
std::vector< EmberCore::ITreeNode * > GetAllNodes() override
Protocol::NodeStatus NodeStatus
bool HasCycles() const override
EmberCore::ITreeNode * GetRootNode() const override
std::shared_ptr< StateManager > GetStateManager()
EmberCore::ITreeNode * FindNodeById(size_t id) const override
std::shared_ptr< const EmberCore::BehaviorTree > GetBehaviorTree() const
NodeStatus GetNodeStatus(size_t node_id) const
~TCPTreeAdapter() override=default
std::shared_ptr< EmberCore::BehaviorTree > m_tree
void TraverseNodes(std::function< void(EmberCore::ITreeNode *)> visitor) override
EmberCore::ITreeNode * FindNodeByName(const EmberCore::String &name) const override
std::shared_ptr< const StateManager > GetStateManager() const
bool HasRootNode() const override
EmberCore::NodeAdapter * m_rootAdapter
size_t GetMaxDepth() const override
std::shared_ptr< StateManager > m_stateManager
EmberCore::String GetTreeStructure() const override
void PrintTree() const override
std::unordered_map< size_t, std::unique_ptr< EmberCore::NodeAdapter > > m_adapters
std::vector< EmberCore::ITreeNode * > FindNodesByType(EmberCore::ITreeNode::NodeType type) const override
bool IsNodeInExecutionPath(size_t node_id) const
std::string String
Framework-agnostic string type.
Definition String.h:14