Grail (C++)  1.3.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 {
15  {
16  friend class DomainTranslator;
17 
18  public:
21  bool TryGetIndexOfObject(const IPlannerObject* object, unsigned int& outIndex) const;
22 
27  template <class ObjectClass>
28  ObjectClass* GetObjectByIndex(unsigned int index) const
29  {
30  auto iter = indexToObjectBinding.find(index);
31  if(iter == indexToObjectBinding.end())
32  {
33  return nullptr;
34  }
35  return static_cast<ObjectClass*>(iter->second);
36  }
37 
38  private:
40  void CreateBinding(const std::vector<IPlannerObject*>& plannerObjects);
41 
42  std::map<const IPlannerObject*, unsigned int> objectToIndexBinding{};
43  std::map<unsigned int, IPlannerObject*> indexToObjectBinding{};
44  };
45 }
46 }
47 #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:19
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:28
grail::planner::ObjectIndexBinding
Definition: ObjectIndexBinding.hh:14