|
Grail (C++)
1.3.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
|
3 #ifndef GRAIL_AI_MANAGER_H
4 #define GRAIL_AI_MANAGER_H
7 #include "EntityGroup.h"
8 #include "SynchronizedEntityContainer.h"
26 virtual void OnEntityRemoved(
const AIManager& manager,
size_t entityId) = 0;
62 void RegisterAIEntity(
const std::shared_ptr<AIEntity>& entity,
int priority);
74 const std::shared_ptr<AIEntity>& parent,
75 int priorityOffset = 1);
125 void UnsubscribeFromBlackboard(
const std::string& blackboardName,
AIEntity& entity);
139 const std::vector<std::pair<std::shared_ptr<AIEntity>,
int>>& GetEntities()
const;
140 const std::vector<std::shared_ptr<EntityGroup>>& GetEntityGroups()
const;
141 const std::map<std::string, std::shared_ptr<Blackboard>>& GetSharedBlackboards()
const;
145 void RequestProcessingEntities();
146 void ThreadUpdate(std::size_t
id);
148 void RemoveEntities();
149 void RegisterEntity(
const std::shared_ptr<AIEntity>& entity,
int priority);
152 const std::vector<std::pair<std::shared_ptr<AIEntity>,
int>>&
154 const std::map<std::string, std::shared_ptr<Blackboard>>&
155 nameBlackboardPairs);
157 std::vector<std::pair<std::shared_ptr<AIEntity>,
int>> entities{};
158 std::set<AIEntity*> entitiesToRemove{};
159 std::map<std::string, std::shared_ptr<Blackboard>> sharedBlackboards{};
162 std::atomic<bool> shouldTerminateWorkers = {0};
164 std::vector<std::thread> threads{};
165 std::mutex blackboardMutex{};
166 mutable std::mutex entitiesMutex{};
168 std::vector<std::shared_ptr<EntityGroup>> entityGroups{};
169 std::vector<IEntityChangeObserver*> entityChangeObservers{};
170 std::shared_ptr<EntityGroup> ungroupedEntities;
173 #endif //GRAIL_AI_MANAGER_H
void RegisterAIEntity(const std::shared_ptr< AIEntity > &entity, int priority)
RegisterAIEntity - Manager registers an entity with a given priority. As a result entities and their ...
Definition: AIManager.cpp:143
void RegisterEntityGroup(const std::shared_ptr< EntityGroup > &entityGroup, int priority)
RegisterEntityGroup - Manager registers an entity group (and its entities) with the given priority....
Definition: AIManager.cpp:214
void RemoveAIEntity(AIEntity *entity)
RemoveAIEntity - Manager caches given entity. Later on all cached entities will be unregistered from ...
Definition: AIManager.cpp:193
The AIEntity class - Defines a basic object which can execute behaviors.
Definition: AIEntity.hh:50
The AIManager class - Manages registered entities and shared blackboards.
Definition: AIManager.hh:32
AIManager(std::size_t threadsNumber=0)
AIManager - Constructs a manager and spawns worker threads defined by the parameter....
Definition: AIManager.cpp:12
void UpdateEntities(float deltaTime)
UpdateEntities - Updates entities and their assigned behaviors.
Definition: AIManager.cpp:126
Blackboard & CreateBlackboard(const std::string &name)
CreateBlackboard - Constructs blackboard owned by this manager.
Definition: AIManager.cpp:309
bool ContainsEntity(const AIEntity &entity) const
ContainsEntity - Checks if a given entity is registered in the manager.
Definition: AIManager.cpp:246
The Blackboard class - grail's universal data container.
Definition: Blackboard.hh:15
void RemoveEntityChangeObserver(IEntityChangeObserver *observer)
RemoveEntityChangeObserver - Removes an entity change observer so it no longer will be notified on ad...
Definition: AIManager.cpp:349
void RegisterEntityChangeObserver(IEntityChangeObserver *observer)
RegisterEntityChangeObserver - Registers an entity change observer that will be notified via OnEntity...
Definition: AIManager.cpp:344
Definition: EntityToken.hh:8
Definition: AIManager.hh:15
void SubscribeToBlackboard(const std::string &blackboardName, AIEntity &entity)
SubscribeToBlackboard - Subscribes a given entity to a blackboard identified by the provided blackboa...
Definition: AIManager.cpp:317
void UpdateReasoners()
UpdateReasoners - Lets registered entities think by updating their reasoner.
Definition: AIManager.cpp:90
void RemoveEntityGroup(const std::shared_ptr< EntityGroup > &entityGroup)
RemoveEntityGroup - Manager removes entity group and caches its entities for removal....
Definition: AIManager.cpp:237
Definition: SynchronizedEntityContainer.h:15