Grail (C++)  1.4.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
WorldState.hh
1 // Copyright QED Software 2023.
2 
3 #ifndef GRAIL_WORLD_STATE_H
4 #define GRAIL_WORLD_STATE_H
5 
6 #include <sstream>
7 #include <vector>
8 #include "WorldObject.hh"
9 #include "../Domain.hh"
10 
11 namespace grail
12 {
13 namespace planner
14 {
21  {
22  public:
29  WorldState(MemoryPool* memory, const std::shared_ptr<Domain>& domain,
30  const std::vector<WorldObject>& worldObjects);
31  WorldState(const WorldState& other);
32  WorldState(WorldState&& other) = default;
33  virtual ~WorldState() override = default;
34 
35  WorldState& operator=(const WorldState& other);
36  WorldState& operator=(WorldState&& other) = default;
37 
38  bool operator==(const WorldState& other) const;
39 
41  std::vector<class Action> GetLegalActions() const;
42 
44  std::vector<std::vector<unsigned int>> GenerateParameterLists(
45  const std::vector<std::vector<unsigned int>>& precedingParameterLists,
46  unsigned int searchedTypeIndex) const;
47 
53  const WorldObject* GetObjectByIndex(unsigned int index) const;
54 
60  WorldObject* GetObjectByIndex(unsigned int index);
61 
63  const std::map<unsigned int, WorldObject>& GetObjectMap() const;
64 
66  std::shared_ptr<Domain> GetDomain() const;
67 
73  WorldObject& AddObject(const std::string& typeName);
74 
77  void RemoveObject(unsigned int objectIndex);
78  void AddQueuedObjects();
79  void RemoveQueuedObjects();
80 
82  std::vector<const WorldObject*> GetObjectsOfType(const std::string& typeName) const;
83 
85  std::vector<WorldObject*> GetObjectsOfType(const std::string& typeName);
86 
88  int CountObjectsOfType(const std::string& typeName) const;
89 
90  private:
91  std::shared_ptr<Domain> domain = nullptr;
92  std::map<unsigned int, WorldObject> objects{};
93  std::vector<WorldObject> objectsToAdd{};
94  std::vector<unsigned int> indicesToRemove{};
95  // 0 is reserved for world
96  unsigned int nextIndex = 1;
97  };
98 }
99 }
100 
101 #endif //GRAIL_WORLD_STATE_H
grail::planner::WorldState::GenerateParameterLists
std::vector< std::vector< unsigned int > > GenerateParameterLists(const std::vector< std::vector< unsigned int >> &precedingParameterLists, unsigned int searchedTypeIndex) const
For internal use only.
Definition: WorldState.cpp:174
grail::planner::WorldObject
Definition: WorldObject.hh:20
grail::planner::WorldState
Definition: WorldState.hh:20
grail::planner::WorldState::WorldState
WorldState(MemoryPool *memory, const std::shared_ptr< Domain > &domain, const std::vector< WorldObject > &worldObjects)
Definition: WorldState.cpp:11
grail::planner::WorldState::CountObjectsOfType
int CountObjectsOfType(const std::string &typeName) const
Definition: WorldState.cpp:135
grail::planner::WorldState::GetObjectsOfType
std::vector< const WorldObject * > GetObjectsOfType(const std::string &typeName) const
Definition: WorldState.cpp:107
grail::planner::MemoryPool
The MemoryPool class - preallocated memory container for optimization issues.
Definition: MemoryPool.hh:79
grail::planner::WorldState::GetDomain
std::shared_ptr< Domain > GetDomain() const
Definition: WorldState.cpp:149
grail::planner::WorldState::GetObjectMap
const std::map< unsigned int, WorldObject > & GetObjectMap() const
Definition: WorldState.cpp:76
grail::planner::WorldState::GetObjectByIndex
const WorldObject * GetObjectByIndex(unsigned int index) const
Definition: WorldState.cpp:56
grail::planner::ParametrizedObject
The base class for parametrized objects (objects with parameters) used by the planning algorithm for ...
Definition: ParametrizedObject.hh:30
grail::planner::WorldState::GetLegalActions
std::vector< class Action > GetLegalActions() const
Definition: WorldState.cpp:30
grail::planner::WorldState::RemoveObject
void RemoveObject(unsigned int objectIndex)
Definition: WorldState.cpp:81
grail::planner::WorldState::AddObject
WorldObject & AddObject(const std::string &typeName)
Definition: WorldState.cpp:47