From 94e529e80129fed4da50e397e7cd788f98b9549d Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Fri, 1 May 2026 16:27:15 -0500 Subject: [PATCH] Add way to get blackboard by type. --- Source/Engine/AI/Behavior.h | 9 +++++++++ Source/Engine/AI/BehaviorKnowledge.h | 13 +++++++++++++ Source/Engine/AI/BehaviorTree.cs | 22 ++++++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/Source/Engine/AI/Behavior.h b/Source/Engine/AI/Behavior.h index b1c39ffc6..cdad7331b 100644 --- a/Source/Engine/AI/Behavior.h +++ b/Source/Engine/AI/Behavior.h @@ -57,6 +57,15 @@ public: { return &_knowledge; } + + /// + /// Gets the blackboard of a given type. + /// + template + FORCE_INLINE T* GetBlackboard() + { + return _knowledge.GetBlackboard(); + } /// /// Gets the last behavior tree execution result. diff --git a/Source/Engine/AI/BehaviorKnowledge.h b/Source/Engine/AI/BehaviorKnowledge.h index cd5aeab80..80f04b6e9 100644 --- a/Source/Engine/AI/BehaviorKnowledge.h +++ b/Source/Engine/AI/BehaviorKnowledge.h @@ -124,6 +124,19 @@ public: RemoveGoal(T::TypeInitializer); } + /// + /// Gets the blackboard of a given type. + /// + template + FORCE_INLINE T* GetBlackboard() + { + auto* structure = Blackboard.AsStructure(); + if (structure) + return structure; + + return Blackboard.AsObject(T::TypeInitializer); + } + public: /// /// Compares two values and returns the comparision result. diff --git a/Source/Engine/AI/BehaviorTree.cs b/Source/Engine/AI/BehaviorTree.cs index b7925aee0..aebc07343 100644 --- a/Source/Engine/AI/BehaviorTree.cs +++ b/Source/Engine/AI/BehaviorTree.cs @@ -11,6 +11,18 @@ using FlaxEngine.GUI; namespace FlaxEngine { + partial class Behavior + { + /// + /// Gets the blackboard of the given type. + /// + /// The blackboard type. + public T GetBlackboard() + { + return Knowledge.GetBlackboard(); + } + } + partial class BehaviorKnowledge { /// @@ -33,6 +45,16 @@ namespace FlaxEngine { RemoveGoal(typeof(T)); } + + /// + /// Gets the blackboard of the given type. + /// + /// The blackboard type. + [Unmanaged] + public T GetBlackboard() + { + return (T)Blackboard; + } } partial class BehaviorTreeRootNode