Grail (C++)  1.1.1
A multi-platform, modular, universal engine for embedding advanced AI in games.
BehaviorSequence.hh
1 #ifndef GRAIL_BEHAVIOR_SEQUENCE_H
2 #define GRAIL_BEHAVIOR_SEQUENCE_H
3 
4 #include "Behavior.hh"
5 
6 #include <memory>
7 #include <vector>
8 
9 namespace grail
10 {
14  class BehaviorSequence : public Behavior
15  {
16  public:
21  BehaviorSequence(std::size_t expectedSequenceSize = 3);
22  virtual ~BehaviorSequence() override = default;
23 
24  BehaviorSequence(const BehaviorSequence& other) = delete;
25  BehaviorSequence(BehaviorSequence&& other) = default;
26 
27  BehaviorSequence& operator =(const BehaviorSequence& other) = delete;
28  BehaviorSequence& operator =(BehaviorSequence&& other) = delete;
29 
30  template <typename BehaviorType, typename... ConstructorArguments>
35  void AddBehavior(ConstructorArguments&&... constructorArguments)
36  {
37  sequence.push_back(std::make_unique<
38  BehaviorType>(std::forward<ConstructorArguments>(constructorArguments)...));
39  currentBehavior = sequence.begin();
40  }
41 
42  virtual void Start(AIEntity& owner) override final;
43  virtual void Update(AIEntity& owner, float deltaTime) override final;
44  virtual void Finish(AIEntity& owner, const BehaviorStatus status) override final;
45 
46  virtual bool IsFinished(const AIEntity& owner) const override final;
47 
53  virtual bool IsLegal(const AIEntity& owner) const override;
54 
59  virtual bool IsInterruptible() const override;
60 
61  private:
62  std::vector<std::unique_ptr<Behavior>> sequence{};
63  std::vector<std::unique_ptr<Behavior>>::iterator currentBehavior{};
64  };
65 }
66 
67 #endif // GRAIL_BEHAVIOR_SEQUENCE_H
grail::AIEntity
The AIEntity class - Defines a basic object which can execute behaviors.
Definition: AIEntity.hh:39
grail::BehaviorSequence::Update
virtual void Update(AIEntity &owner, float deltaTime) override final
Definition: BehaviorSequence.cpp:19
grail::BehaviorSequence::IsInterruptible
virtual bool IsInterruptible() const override
IsInterruptible.
Definition: BehaviorSequence.cpp:58
grail::BehaviorSequence
The BehaviorSequence class - specialized Behavior executing sequence of provided subbehaviors one by ...
Definition: BehaviorSequence.hh:14
grail::Behavior
A high-level abstraction of actions in the game.
Definition: Behavior.hh:19
grail::BehaviorSequence::IsFinished
virtual bool IsFinished(const AIEntity &owner) const override final
Definition: BehaviorSequence.cpp:48
grail::BehaviorSequence::Finish
virtual void Finish(AIEntity &owner, const BehaviorStatus status) override final
Definition: BehaviorSequence.cpp:39
grail::BehaviorSequence::AddBehavior
void AddBehavior(ConstructorArguments &&... constructorArguments)
AddBehavior - method emplacing new behavior in the sequence.
Definition: BehaviorSequence.hh:35
grail::BehaviorSequence::Start
virtual void Start(AIEntity &owner) override final
Definition: BehaviorSequence.cpp:13
grail::BehaviorSequence::IsLegal
virtual bool IsLegal(const AIEntity &owner) const override
IsLegal.
Definition: BehaviorSequence.cpp:53