R-Type
R-Type project
Animator.hpp
1 /*
2 ** EPITECH PROJECT, 2022
3 ** gameEngine2
4 ** File description:
5 ** Animator
6 */
7 
8 #ifndef ANIMATOR_HPP_
9 #define ANIMATOR_HPP_
10 
11 #include "KapEngine.hpp"
12 
13 namespace KapEngine {
14 
22  class Animator : public Component {
23  public:
24  struct NodeAnim;
25 
26  struct LinkAnim {
27  std::shared_ptr<NodeAnim> target;
28  std::vector<std::string> triggers;
29  bool mainExit;
30  };
31 
32  struct NodeAnim {
33  std::string _name;
34  std::shared_ptr<Animation> _anim;
35  std::vector<std::shared_ptr<LinkAnim>> links;
36 
37  bool _goAfter;
38 
39  NodeAnim(std::shared_ptr<Animation> anim, std::string name) {
40  PROFILER_FUNC_START();
41  _anim = anim;
42  _name = name;
43  _goAfter = true;
44  PROFILER_FUNC_END();
45  }
46 
47  bool hasMainExit() {
48  PROFILER_FUNC_START();
49  for (std::size_t i = 0; i < links.size(); i++) {
50  if (links.at(i).get()->mainExit) {
51  PROFILER_FUNC_END();
52  return true;
53  }
54  }
55  PROFILER_FUNC_END();
56  return false;
57  }
58  };
59 
60 
61  public:
62  Animator(std::shared_ptr<GameObject> go);
63  ~Animator();
64 
65  void onStart() override;
66  void onFixedUpdate() override;
67 
75  void addAnim(std::shared_ptr<Animation> anim, std::string name);
84  void addLink(std::string animName, std::string outAnim, std::string trigger = "");
93  void addLink(std::string animName, std::string outAnim, std::vector<std::string> triggers);
94 
100  void setTrigger(std::string name);
101 
108  std::shared_ptr<NodeAnim> getAnimNode(std::string name);
109 
110  protected:
111  private:
112  size_t _currAnim = 0;
113  std::shared_ptr<NodeAnim> _anim;
114  std::shared_ptr<NodeAnim> _firstAnim;
115  std::vector<std::shared_ptr<NodeAnim>> _anims;
116  };
117 
118 }
119 
120 #endif /* !ANIMATOR_HPP_ */
KapEngine::Animator::getAnimNode
std::shared_ptr< NodeAnim > getAnimNode(std::string name)
get node animator that contains 1 animations
Definition: Animator.cpp:86
KapEngine::Animator::LinkAnim
Definition: Animator.hpp:26
KapEngine::Animator::addAnim
void addAnim(std::shared_ptr< Animation > anim, std::string name)
add animation
Definition: Animator.cpp:48
KapEngine::Animator::setTrigger
void setTrigger(std::string name)
call a trigger
Definition: Animator.cpp:60
KapEngine::Animator::onStart
void onStart() override
call component start
Definition: Animator.cpp:18
KapEngine::Animator::addLink
void addLink(std::string animName, std::string outAnim, std::string trigger="")
link two animations
Definition: Animator.cpp:99
KapEngine::Animator::onFixedUpdate
void onFixedUpdate() override
call eachv x ms
Definition: Animator.cpp:28
KapEngine::Component
Definition: Component.hpp:38
KapEngine::Animator
Definition: Animator.hpp:22
KapEngine::Animator::NodeAnim
Definition: Animator.hpp:32
KapEngine
main namespace
Definition: Component.hpp:17