summary refs log tree commit diff stats
path: root/src/entity.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/entity.h')
-rw-r--r--src/entity.h81
1 files changed, 34 insertions, 47 deletions
diff --git a/src/entity.h b/src/entity.h index 5a37147..803a9b8 100644 --- a/src/entity.h +++ b/src/entity.h
@@ -3,42 +3,45 @@
3 3
4class Entity; 4class Entity;
5class Component; 5class Component;
6class Locatable;
7class Collidable;
8 6
9#include <list> 7#include <list>
10#include "renderer.h" 8#include "renderer.h"
11#include "world.h" 9#include "game.h"
12 10
13enum message_type { 11class Message {
14 CM_WALK_LEFT, 12 public:
15 CM_WALK_RIGHT, 13 enum class Type {
16 CM_STOP_WALKING, 14 walkLeft,
17 CM_COLLISION, 15 walkRight,
18 CM_JUMP, 16 stopWalking,
19 CM_STOP_JUMP, 17 stopMovingHorizontally,
20 CM_DROP, 18 stopMovingVertically,
21 CM_CAN_DROP, 19 collision,
22 CM_CANT_DROP 20 jump,
21 stopJump,
22 drop,
23 canDrop,
24 cantDrop
25 };
26
27 Message(Type type) : type(type) {}
28
29 Type type;
30 Entity* collisionEntity;
31 int dropAxis;
23}; 32};
24 33
25typedef struct {
26 message_type type;
27 Entity* collisionEntity;
28 int dropAxis;
29} message_t;
30
31class Entity { 34class Entity {
32 public: 35 public:
33 Entity(World* world) : world(world) {}
34 ~Entity() {};
35 void addComponent(std::shared_ptr<Component> c); 36 void addComponent(std::shared_ptr<Component> c);
36 void send(message_t msg); 37 void send(Game& game, Message& msg);
37 void tick(); 38 void tick(Game& game);
38 void input(int key, int action); 39 void input(Game& game, int key, int action);
39 void render(Texture* buffer); 40 void render(Game& game, Texture& buffer);
41 void detectCollision(Game& game, Entity& collider, std::pair<double, double> old_position);
40 42
41 World* world; 43 std::pair<double, double> position;
44 std::pair<int, int> size;
42 45
43 private: 46 private:
44 std::list<std::shared_ptr<Component>> components; 47 std::list<std::shared_ptr<Component>> components;
@@ -46,27 +49,11 @@ class Entity {
46 49
47class Component { 50class Component {
48 public: 51 public:
49 Component(Entity& entity) : entity(entity) {} 52 virtual void receive(Game&, Entity&, Message&) {}
50 virtual ~Component() {}; 53 virtual void render(Game&, Entity&, Texture&) {}
51 virtual void receive(message_t msg) {(void)msg;} 54 virtual void tick(Game&, Entity&) {}
52 virtual void render(Texture* tex) {(void)tex;} 55 virtual void input(Game&, Entity&, int, int) {}
53 virtual void tick() {} 56 virtual void detectCollision(Game&, Entity&, Entity&, std::pair<double, double>) {}
54 virtual void input(int key, int action) {(void)key; (void)action;}
55
56 Entity& entity;
57};
58
59class Locatable {
60 public:
61 std::pair<double, double> position;
62 std::pair<int, int> size;
63 std::pair<double, double> velocity;
64 std::pair<double, double> accel;
65};
66
67class Collidable {
68 public:
69 virtual void detectCollision(Entity& player, Locatable& physics, std::pair<double, double> old_position) = 0;
70}; 57};
71 58
72#endif 59#endif