R-Type
R-Type project
Collider.hpp
1 /*
2 ** EPITECH PROJECT, 2022
3 ** engine
4 ** File description:
5 ** Collider
6 */
7 
8 #ifndef COLLIDER_HPP_
9 #define COLLIDER_HPP_
10 
11 #include "KapEngine.hpp"
12 #include "KapEngineDebug.hpp"
13 #include <vector>
14 
15 namespace KapEngine {
16 
24  class Collider : public Component {
25  public:
26  Collider(std::shared_ptr<GameObject> go, bool isTrigger = false);
27  ~Collider();
28 
29  void onUpdate() override;
30  void onSceneUpdated() override;
31 
37  void setTrigger(bool isTrigger) {
38  PROFILER_FUNC_START();
39  _isTrigger = isTrigger;
40  PROFILER_FUNC_END();
41  }
42 
49  bool isTrigger() const {
50  PROFILER_FUNC_START();
51  PROFILER_FUNC_END();
52  return _isTrigger;
53  }
54 
60 
66  std::vector<std::shared_ptr<Collider>> getCollidedObjects() const {
67  PROFILER_FUNC_START();
68  std::vector<std::shared_ptr<Collider>> result;
69 
70  for (std::size_t i = 0; i < _justCollidedObjects.size(); i++) {
71  result.push_back(_justCollidedObjects[i]);
72  }
73  for (std::size_t i = 0; i < _notCollidedObjects.size(); i++) {
74  result.push_back(_notCollidedObjects[i]);
75  }
76 
77  PROFILER_FUNC_END();
78  return result;
79  }
80 
81  void __callEnter(GameObject &go);
82  void __callStay(GameObject &go);
83  void __callExit(GameObject &go);
84 
85  protected:
86  private:
87  bool _isTrigger = false;
88 
89  Tools::Rectangle _boxCollider;
90 
91  //object just collide with this object
92  std::vector<std::shared_ptr<Collider>> _justCollidedObjects;
93  //object not collided but calculated
94  std::vector<std::shared_ptr<Collider>> _notCollidedObjects;
95  //object already collide with this object
96  std::vector<std::shared_ptr<Collider>> _collidedObjects;
97 
98  bool __checkCollision(Tools::Rectangle const& rect);
99  void __checkCollision(std::shared_ptr<GameObject> &go);
100  bool __colliderAlreadyCollide(std::shared_ptr<Collider> &collider);
101  bool __currentlyCollided(std::shared_ptr<Collider> &collider);
102  bool __alreayCalculated(std::shared_ptr<Collider> &collider);
103  void __checkCollidersExists();
104  };
105 
106 }
107 
108 #endif /* !COLLIDER_HPP_ */
KapEngine::Collider::setTrigger
void setTrigger(bool isTrigger)
Set the Trigger.
Definition: Collider.hpp:37
KapEngine::Collider::onUpdate
void onUpdate() override
call each frame
Definition: Collider.cpp:26
KapEngine::Collider
Definition: Collider.hpp:24
KapEngine::GameObject
Definition: GameObject.hpp:40
KapEngine::Collider::getCollidedObjects
std::vector< std::shared_ptr< Collider > > getCollidedObjects() const
Get the Collided Objects object.
Definition: Collider.hpp:66
KapEngine::Component
Definition: Component.hpp:38
KapEngine::Collider::onSceneUpdated
void onSceneUpdated() override
call when scene is updated (not threaded)
Definition: Collider.cpp:43
KapEngine
main namespace
Definition: Component.hpp:17
KapEngine::Tools::Rectangle
Definition: Rectangle.hpp:23
KapEngine::Collider::getCalculatedRectangle
Tools::Rectangle getCalculatedRectangle() const
get calculated rectangle
Definition: Collider.cpp:169
KapEngine::Collider::isTrigger
bool isTrigger() const
get if collider is trigger
Definition: Collider.hpp:49