Grail (C++)  1.2.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
EntityGroup.h
1 // Copyright QED Software 2023.
2 
3 #ifndef GRAIL_ENTITY_GROUP_H
4 #define GRAIL_ENTITY_GROUP_H
5 
6 #include "AIEntity.hh"
7 #include "Blackboard.hh"
8 
9 #include <string>
10 #include <vector>
11 
12 namespace grail
13 {
14  //REVIEW: this is an internal struct, but consider at least dox comment for us about its purpose
15  struct EntityEntry
16  {
17  std::shared_ptr<AIEntity> entity;
18  int relativePriority;
19 
20  EntityEntry(const std::shared_ptr<AIEntity>& entity, int relativePriority);
21  };
22 
24  {
25  public:
26  EntityGroup(const std::string& name);
27  EntityGroup(const std::string& name, const std::vector<EntityEntry>& entityEntries);
28 
29  const std::string& GetName() const;
30 
31  void SetId(size_t id);
32  size_t GetId() const;
33 
34  void AddEntityEntry(const std::shared_ptr<AIEntity>& entity, int relativePriority);
35  void RemoveEntityEntry(const AIEntity& entity);
36  void AddGroupBlackboard(const std::string& name, const std::shared_ptr<Blackboard>& blackboard);
37  void AddGlobalBlackboardMapping(std::shared_ptr<AIEntity> entity,
38  const std::vector<std::string>& blackboardNames);
39 
40  std::shared_ptr<AIEntity> GetEntity(const std::string& name) const;
41  const std::vector<EntityEntry>& GetEntityEntries() const;
42  const std::vector<std::pair<std::string, std::shared_ptr<Blackboard>>>& GetGroupBlackboards() const;
43  const std::vector<std::pair<std::shared_ptr<AIEntity>, std::vector<std::string>>>&
44  GetGlobalBlackboardMapping() const;
45  private:
46  std::string name{};
47  size_t id = std::numeric_limits<size_t>::max();
48  std::vector<EntityEntry> entityEntries{};
49  std::vector<std::pair<std::string, std::shared_ptr<Blackboard>>> groupBlackboards{};
50  std::vector<std::pair<std::shared_ptr<AIEntity>, std::vector<std::string>>> globalBlackboardMapping{};
51  };
52 }
53 
54 #endif
grail::EntityEntry
Definition: EntityGroup.h:15
grail::EntityGroup
Definition: EntityGroup.h:23
grail::AIEntity
The AIEntity class - Defines a basic object which can execute behaviors.
Definition: AIEntity.hh:50