Grail (C++)  1.4.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
ObjectIndexBinding.hh
1 // Copyright QED Software 2023.
2 
3 #ifndef GRAIL_OBJECT_INDEX_BINDING_H
4 #define GRAIL_OBJECT_INDEX_BINDING_H
5 
6 #include "IPlannerObject.hh"
7 
8 namespace grail
9 {
10 namespace planner
11 {
18  {
19  friend class DomainTranslator;
20 
21  public:
24  bool TryGetIndexOfObject(const IPlannerObject* object, unsigned int& outIndex) const;
25 
30  template <class ObjectClass>
31  ObjectClass* GetObjectByIndex(unsigned int index) const
32  {
33  auto iter = indexToObjectBinding.find(index);
34  if(iter == indexToObjectBinding.end())
35  {
36  return nullptr;
37  }
38  return static_cast<ObjectClass*>(iter->second);
39  }
40 
41  private:
43  void CreateBinding(const std::vector<IPlannerObject*>& plannerObjects);
44 
45  std::map<const IPlannerObject*, unsigned int> objectToIndexBinding{};
46  std::map<unsigned int, IPlannerObject*> indexToObjectBinding{};
47  };
48 }
49 }
50 #endif //GRAIL_OBJECT_INDEX_BINDING_H
grail::planner::ObjectIndexBinding::TryGetIndexOfObject
bool TryGetIndexOfObject(const IPlannerObject *object, unsigned int &outIndex) const
Definition: ObjectIndexBinding.cpp:13
grail::planner::DomainTranslator
Definition: DomainTranslator.hh:20
grail::planner::IPlannerObject
The interface to be implemented by classes that should be converted and bound to plan-space WorldObje...
Definition: IPlannerObject.hh:16
grail::planner::ObjectIndexBinding::GetObjectByIndex
ObjectClass * GetObjectByIndex(unsigned int index) const
Definition: ObjectIndexBinding.hh:31
grail::planner::ObjectIndexBinding
Definition: ObjectIndexBinding.hh:17