summary refs log tree commit diff stats
path: root/src/components/map_collision.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/map_collision.h')
-rw-r--r--src/components/map_collision.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/components/map_collision.h b/src/components/map_collision.h new file mode 100644 index 0000000..3b718b6 --- /dev/null +++ b/src/components/map_collision.h
@@ -0,0 +1,46 @@
1#ifndef MAP_COLLISION_H
2#define MAP_COLLISION_H
3
4#include "entity.h"
5#include <list>
6
7class Map;
8class Game;
9
10class MapCollisionComponent : public Component {
11 public:
12 MapCollisionComponent(const Map& map);
13 void detectCollision(Game& game, Entity& entity, Entity& collider, std::pair<double, double> old_position);
14
15 private:
16 enum class Direction {
17 up, left, down, right
18 };
19
20 struct Collision {
21 enum class Type {
22 wall,
23 wrap,
24 teleport,
25 reverse,
26 platform,
27 danger
28 };
29
30 double axis;
31 double lower;
32 double upper;
33 Type type;
34 };
35
36 void addCollision(double axis, double lower, double upper, Direction dir, Collision::Type type);
37 void processCollision(Game& game, Entity& collider, Collision collision, Direction dir, std::pair<double, double> old_position);
38
39 std::list<Collision> left_collisions;
40 std::list<Collision> right_collisions;
41 std::list<Collision> up_collisions;
42 std::list<Collision> down_collisions;
43 const Map& map;
44};
45
46#endif