summary refs log tree commit diff stats
path: root/src/components.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/components.h')
-rw-r--r--src/components.h76
1 files changed, 39 insertions, 37 deletions
diff --git a/src/components.h b/src/components.h index 687eab1..f9b6e1e 100644 --- a/src/components.h +++ b/src/components.h
@@ -5,48 +5,50 @@
5#include <utility> 5#include <utility>
6#include <list> 6#include <list>
7#include "map.h" 7#include "map.h"
8#include <memory>
8 9
9class UserMovementComponent : public Component { 10class UserMovementComponent : public Component {
10 public: 11 public:
11 UserMovementComponent(Entity& parent) : Component(parent) {}; 12 void input(Game& game, Entity& entity, int key, int action);
12 void input(int key, int action);
13 13
14 private: 14 private:
15 bool holdingLeft = false; 15 bool holdingLeft = false;
16 bool holdingRight = false; 16 bool holdingRight = false;
17}; 17};
18 18
19class PhysicsBodyComponent : public Component, public Collidable, public Locatable { 19class PhysicsBodyComponent : public Component {
20 public: 20 public:
21 PhysicsBodyComponent(Entity& parent) : Component(parent) {}; 21 void receive(Game& game, Entity& entity, Message& msg);
22 void receive(message_t msg); 22 void tick(Game& game, Entity& entity);
23 void tick(); 23 void detectCollision(Game& game, Entity& entity, Entity& collider, std::pair<double, double> old_position);
24 void detectCollision(Entity& player, Locatable& physics, std::pair<double, double> old_position); 24
25 private:
26 std::pair<double, double> velocity;
27 std::pair<double, double> accel;
25}; 28};
26 29
27class PlayerSpriteComponent : public Component { 30class PlayerSpriteComponent : public Component {
28 public: 31 public:
29 PlayerSpriteComponent(Entity& parent, Locatable& physics); 32 void render(Game& game, Entity& entity, Texture& buffer);
30 ~PlayerSpriteComponent(); 33 void receive(Game& game, Entity& entity, Message& msg);
31 void render(Texture* buffer); 34 void tick(Game& game, Entity& entity);
32 void receive(message_t msg);
33 void tick();
34 35
35 private: 36 private:
36 Locatable& physics; 37 Texture sprite{"../res/Starla.png"};
37 Texture* sprite;
38 int animFrame = 0; 38 int animFrame = 0;
39 bool facingLeft = false; 39 bool facingLeft = false;
40 bool isMoving = false; 40 bool isMoving = false;
41}; 41};
42 42
43class PlayerPhysicsComponent : public Component, public Locatable { 43class PlayerPhysicsComponent : public Component {
44 public: 44 public:
45 PlayerPhysicsComponent(Entity& parent); 45 PlayerPhysicsComponent();
46 void tick(); 46 void tick(Game& game, Entity& entity);
47 void receive(message_t msg); 47 void receive(Game& game, Entity& entity, Message& msg);
48 48
49 private: 49 private:
50 std::pair<double, double> velocity;
51 std::pair<double, double> accel;
50 double jump_velocity; 52 double jump_velocity;
51 double jump_gravity; 53 double jump_gravity;
52 double jump_gravity_short; 54 double jump_gravity_short;
@@ -56,38 +58,38 @@ class PlayerPhysicsComponent : public Component, public Locatable {
56 58
57class MapRenderComponent : public Component { 59class MapRenderComponent : public Component {
58 public: 60 public:
59 MapRenderComponent(Entity& parent, Map* map); 61 MapRenderComponent(Map& map);
60 ~MapRenderComponent(); 62 void render(Game& game, Entity& entity, Texture& buffer);
61 void render(Texture* buffer);
62 63
63 private: 64 private:
64 Texture* screen; 65 Texture screen{GAME_WIDTH, GAME_HEIGHT};
65};
66
67enum direction_t {
68 up, left, down, right
69}; 66};
70 67
71typedef struct { 68class MapCollisionComponent : public Component {
72 int axis;
73 int lower;
74 int upper;
75 int type;
76} collision_t;
77
78class MapCollisionComponent : public Component, public Collidable {
79 public: 69 public:
80 MapCollisionComponent(Entity& parent, Map* map); 70 MapCollisionComponent(Map& map);
81 void detectCollision(Entity& player, Locatable& physics, std::pair<double, double> old_position); 71 void detectCollision(Game& game, Entity& entity, Entity& collider, std::pair<double, double> old_position);
82 72
83 private: 73 private:
74 enum direction_t {
75 up, left, down, right
76 };
77
78 typedef struct {
79 int axis;
80 int lower;
81 int upper;
82 int type;
83 } collision_t;
84
84 void add_collision(int axis, int lower, int upper, direction_t dir, int type); 85 void add_collision(int axis, int lower, int upper, direction_t dir, int type);
85 86
86 std::list<collision_t> left_collisions; 87 std::list<collision_t> left_collisions;
87 std::list<collision_t> right_collisions; 88 std::list<collision_t> right_collisions;
88 std::list<collision_t> up_collisions; 89 std::list<collision_t> up_collisions;
89 std::list<collision_t> down_collisions; 90 std::list<collision_t> down_collisions;
90 Map* map; 91 Map* leftMap;
92 Map* rightMap;
91}; 93};
92 94
93#endif 95#endif