SDL SPOOKY PLATFORMER ENGINE  0.2.0
An implementation of a platformer using sdl, implemented using an entity component system and efficient collision management.
ColliderComponent.hpp
Go to the documentation of this file.
1 #ifndef COLLIDER_COMPONENT_HPP
2 #define COLLIDER_COMPONENT_HPP
3 
4 #include "Component.hpp"
5 #include "TransformComponent.hpp"
6 #include "PhysicsComponent.hpp"
7 #include "ComponentUtils.hpp"
8 #include "HealthComponent.hpp"
9 #include "TinyMath.hpp"
10 #include "SDL2/SDL.h"
11 #include "GameObject.hpp"
12 
16 enum class CollisionType
17 {
18  North,
19  South,
20  East,
21  West,
22  NoContact
23 };
24 
25 /*
26 
27 Rectangle collision types:
28  N
29  - - - - - - -
30  | |
31  | |
32  W | | E
33  | |
34  - - - - - - -
35  S
36 */
37 
38 class ColliderComponent;
39 
41 {
42  ColliderInfo(ColliderComponent *collider, TransformComponent *transform, PhysicsComponent *physics, std::string tag)
43  : m_collider(collider), m_transform(transform), m_physics(physics), m_tag(tag)
44  {
45  }
46 
48  {
49  return m_collider;
50  }
51 
53  {
54  return m_transform;
55  }
56 
58  {
59  return m_physics;
60  }
61 
62  std::string &tag()
63  {
64  return m_tag;
65  }
66 
67 private:
68  ColliderComponent *m_collider;
69  TransformComponent *m_transform;
70  PhysicsComponent *m_physics = nullptr;
71  std::string m_tag;
72 };
73 
76 {
77 public:
79 
80  virtual void OnCollision(ColliderInfo myComponents, ColliderInfo otherComponents, CollisionType cType) = 0;
81 
82 protected:
84 };
85 
87 {
88  public:
90 
91  void OnCollision(ColliderInfo myComponents, ColliderInfo otherComponents, CollisionType cType);
93 };
94 
96 {
98 
99  void OnCollision(ColliderInfo myComponents, ColliderInfo otherComponents, CollisionType cType);
100 };
101 
103 {
105 
106  void OnCollision(ColliderInfo myComponents, ColliderInfo otherComponents, CollisionType cType);
107 };
108 
110 {
111 public:
113 
115 
116  Vector3D &GetSize();
117 
118  void setColliding(CollisionType to);
119 
120  void Update(float fixedTime);
121 
122  void Render(SDL_Renderer *ren);
123 
124 protected:
128 };
129 #endif
CollisionType is_colliding
Definition: ColliderComponent.hpp:126
void Render(SDL_Renderer *ren)
Render this component in the screen if it can be rendered.
Definition: ColliderComponent.cpp:28
void Update(float fixedTime)
Update this component according to the deltaTime.
Definition: ColliderComponent.cpp:15
Vector3D & GetSize()
Definition: ColliderComponent.cpp:10
no collision occurred.
ColliderComponent(Vector3D size, ColliderReceiver *receiver)
Definition: ColliderComponent.cpp:6
ColliderReceiver(GameObject *myself)
base class
Definition: ColliderComponent.cpp:49
Definition: ColliderComponent.hpp:102
Definition: ColliderComponent.hpp:109
Definition: PhysicsComponent.hpp:8
Definition: ColliderComponent.hpp:86
std::string & tag()
Definition: ColliderComponent.hpp:62
Definition: HealthComponent.hpp:11
CollisionType
Definition: ColliderComponent.hpp:16
Definition: ColliderComponent.hpp:40
the north side.
Definition: TransformComponent.hpp:6
void setColliding(CollisionType to)
Definition: ColliderComponent.cpp:43
TransformComponent * t()
Definition: ColliderComponent.hpp:52
Vector3D m_size
Definition: ColliderComponent.hpp:125
ColliderComponent * c()
Definition: ColliderComponent.hpp:47
a collider receiver defines how a game object should respond when it collides with something
Definition: ColliderComponent.hpp:75
Definition: GameObject.hpp:12
virtual void OnCollision(ColliderInfo myComponents, ColliderInfo otherComponents, CollisionType cType) = 0
CollisionReceiverPlayer(GameObject *myself)
Definition: ColliderComponent.cpp:51
void OnCollision(ColliderInfo myComponents, ColliderInfo otherComponents, CollisionType cType)
test lambda
Definition: ColliderComponent.cpp:54
HealthComponent * health
Definition: ColliderComponent.hpp:92
Definition: TinyMath.hpp:15
GameObject * _myself
Definition: ColliderComponent.hpp:83
PhysicsComponent * p()
Definition: ColliderComponent.hpp:57
Definition: ColliderComponent.hpp:95
ColliderInfo(ColliderComponent *collider, TransformComponent *transform, PhysicsComponent *physics, std::string tag)
Definition: ColliderComponent.hpp:42
Definition: Component.hpp:13
PhysicsComponent * physics
Definition: ColliderComponent.hpp:127
ColliderReceiver * receiver
Definition: ColliderComponent.hpp:112