Grail (C++)  1.2.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
ActionTemplate.hh
1 // Copyright QED Software 2023.
2 
3 #ifndef GRAIL_ACTION_TEMPLATE_H
4 #define GRAIL_ACTION_TEMPLATE_H
5 
6 #include <functional>
7 #include <string>
8 #include <vector>
9 
10 namespace grail
11 {
12 namespace planner
13 {
14  class WorldObject;
15  class WorldState;
16 
17  using PreconditionFunction = std::function<bool(const std::vector<const WorldObject*>&, const WorldState&)>;
18  using EffectFunction = std::function<void(const std::vector<WorldObject*>&, WorldState&)>;
19  using CostFunction = std::function<double(const std::vector<const WorldObject*>&, const WorldState&)>;
20 
23  {
24  friend class Action;
25 
26  public:
27  ActionTemplate(const std::string& name, const std::vector<unsigned int>& actionParameterTypes);
28  ActionTemplate(ActionTemplate&& other) = default;
29  ~ActionTemplate() = default;
30 
33  void SetPreconditions(PreconditionFunction preconditionFunction);
34 
37  void SetEffects(EffectFunction effectFunction);
38 
41  void SetCostFunction(CostFunction costFunction);
42 
43  void SetTypeId(int id);
44  int GetTypeId() const;
45  const std::string& GetName() const;
46  std::vector<class Action> GenerateActions(const class WorldState& worldState) const;
47 
48  private:
49  std::string name = "";
50  std::vector<unsigned int> actionParameterTypes{};
51  PreconditionFunction preconditions = [](const std::vector<const WorldObject*>&, const WorldState&)
52  {
53  return true;
54  };
55  EffectFunction effects = [](const std::vector<WorldObject*>&, WorldState&)
56  {
57  };
58  CostFunction cost = [](const std::vector<const WorldObject*>&, const WorldState&) { return 1.0; };
59  int typeId = -1;
60  };
61 }
62 }
63 
64 #endif // GRAIL_ACTION_TEMPLATE_H
grail::planner::Action
Definition: Action.hh:12
grail::planner::WorldState
A class representing planner world state.
Definition: WorldState.hh:16
grail::planner::ActionTemplate
A class representing an action that can be simulated by grail planner.
Definition: ActionTemplate.hh:22
grail::planner::ActionTemplate::SetPreconditions
void SetPreconditions(PreconditionFunction preconditionFunction)
Definition: ActionTemplate.cpp:17
grail::planner::ActionTemplate::SetCostFunction
void SetCostFunction(CostFunction costFunction)
Definition: ActionTemplate.cpp:27
grail::planner::ActionTemplate::SetEffects
void SetEffects(EffectFunction effectFunction)
Definition: ActionTemplate.cpp:22