Ember
Loading...
Searching...
No Matches
ITreeNode.h
Go to the documentation of this file.
1#pragma once
2
14
15#include "Types/Types.h"
16#include <cstdint>
17#include <functional>
18#include <memory>
19#include <vector>
20
21namespace EmberCore {
22
31class ITreeNode {
32 public:
36 enum class NodeType {
38 Action, // Leaf nodes that perform actions
39 Control, // Control flow nodes (sequence, selector, parallel)
40 Condition, // Condition/decorator nodes
41 Decorator, // Modifier nodes that alter child behavior
42 BehaviorTree // BehaviorTree definition node (visual wrapper)
43 };
44
48 enum class NodeStatus {
49 Idle, // Not yet executed
50 Running, // Currently executing
51 Success, // Execution completed successfully
52 Failure // Execution failed
53 };
54
59
60 public:
61 virtual ~ITreeNode() = default;
62
63 // Core node properties
64 virtual const String &GetName() const = 0;
65 virtual NodeType GetType() const = 0;
66 virtual NodeStatus GetStatus() const = 0;
67 virtual size_t GetId() const = 0;
68
69 // Tree structure
70 virtual size_t GetChildCount() const = 0;
71 virtual ITreeNode *GetChild(size_t index) const = 0;
72 virtual ITreeNode *GetParent() const = 0;
73 virtual bool HasChildren() const { return GetChildCount() > 0; }
74
75 // Visual properties
76 virtual const Point &GetPosition() const = 0;
77 virtual void SetPosition(const Point &position) = 0;
78 virtual VisualState GetVisualState() const = 0;
79 virtual void SetVisualState(VisualState state) = 0;
80
81 // Children visibility (for expand/collapse functionality)
82 virtual bool AreChildrenVisible() const = 0;
83 virtual void SetChildrenVisible(bool visible) = 0;
85
86 // Layout support
87 virtual int GetChildrenWidth() const = 0;
88 virtual void SetChildrenWidth(int width) = 0;
89 virtual int CalculateSubtreeWidth(int node_width, int horizontal_spacing) const = 0;
90
91 // Tree statistics
92 virtual size_t GetDepth() const = 0;
93 virtual size_t GetSubtreeNodeCount() const = 0;
94
95 // SubTree/reference status
100 virtual bool IsSubTreeReference() const { return false; }
101
106 virtual bool IsUnimplementedReference() const { return false; }
107
112 virtual String GetSubTreeReference() const { return ""; }
113
114 // Utility functions for display
115 virtual String GetTypeString() const {
116 switch (GetType()) {
117 case NodeType::Action:
118 return "Action";
120 return "Control";
122 return "Condition";
124 return "Decorator";
126 return "BehaviorTree";
127 default:
128 return "Unknown";
129 }
130 }
131
132 virtual String GetStatusString() const {
133 switch (GetStatus()) {
134 case NodeStatus::Idle:
135 return "Idle";
137 return "Running";
139 return "Success";
141 return "Failure";
142 default:
143 return "Unknown";
144 }
145 }
146
147 // Visitor pattern support for tree traversal
148 virtual void Accept(std::function<void(ITreeNode *)> visitor) = 0;
149 virtual void Accept(std::function<void(const ITreeNode *)> visitor) const = 0;
150};
151
152} // namespace EmberCore
Abstract interface for tree nodes that can be visualized.
Definition ITreeNode.h:31
virtual bool IsUnimplementedReference() const
Check if this node references an unimplemented tree.
Definition ITreeNode.h:106
virtual String GetTypeString() const
Definition ITreeNode.h:115
virtual void Accept(std::function< void(const ITreeNode *)> visitor) const =0
virtual bool IsSubTreeReference() const
Check if this node is a SubTree reference.
Definition ITreeNode.h:100
virtual size_t GetSubtreeNodeCount() const =0
virtual size_t GetId() const =0
virtual String GetSubTreeReference() const
Get the ID of the referenced SubTree (if this is a SubTree node)
Definition ITreeNode.h:112
virtual size_t GetChildCount() const =0
virtual const Point & GetPosition() const =0
virtual NodeType GetType() const =0
virtual ITreeNode * GetParent() const =0
virtual ~ITreeNode()=default
virtual void SetChildrenWidth(int width)=0
virtual int CalculateSubtreeWidth(int node_width, int horizontal_spacing) const =0
virtual void ToggleChildrenVisibility()
Definition ITreeNode.h:84
VisualState
Visual state for UI rendering.
Definition ITreeNode.h:58
virtual bool AreChildrenVisible() const =0
virtual size_t GetDepth() const =0
virtual bool HasChildren() const
Definition ITreeNode.h:73
virtual void Accept(std::function< void(ITreeNode *)> visitor)=0
virtual int GetChildrenWidth() const =0
virtual void SetChildrenVisible(bool visible)=0
virtual const String & GetName() const =0
virtual VisualState GetVisualState() const =0
virtual void SetPosition(const Point &position)=0
virtual NodeStatus GetStatus() const =0
virtual String GetStatusString() const
Definition ITreeNode.h:132
virtual ITreeNode * GetChild(size_t index) const =0
NodeType
Node types for visualization categorization.
Definition ITreeNode.h:36
NodeStatus
Node status for runtime visualization.
Definition ITreeNode.h:48
virtual void SetVisualState(VisualState state)=0
Main types header for EmberCore.
std::string String
Framework-agnostic string type.
Definition String.h:14
2D point with integer coordinates
Definition Geometry.h:8