summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components.cpp27
-rw-r--r--src/components.h18
-rw-r--r--src/game.cpp23
3 files changed, 68 insertions, 0 deletions
diff --git a/src/components.cpp b/src/components.cpp index 5f67934..26aa5d2 100644 --- a/src/components.cpp +++ b/src/components.cpp
@@ -585,3 +585,30 @@ bool MapCollisionComponent::processCollision(Game& game, Entity& collider, Colli
585 585
586 return false; 586 return false;
587} 587}
588
589// Static image
590
591StaticImageComponent::StaticImageComponent(const char* filename) : sprite(Texture(filename))
592{
593
594}
595
596void StaticImageComponent::render(Game&, Entity& entity, Texture& buffer)
597{
598 buffer.blit(sprite, sprite.entirety(), {(int) entity.position.first, (int) entity.position.second, entity.size.first, entity.size.second});
599}
600
601// Simple collision
602
603SimpleColliderComponent::SimpleColliderComponent(std::function<void (Entity& collider)> callback) : callback(callback)
604{
605
606}
607
608void SimpleColliderComponent::receive(Game&, Entity&, const Message& msg)
609{
610 if (msg.type == Message::Type::collision)
611 {
612 callback(*(msg.collisionEntity));
613 }
614}
diff --git a/src/components.h b/src/components.h index c66db47..f5c66d4 100644 --- a/src/components.h +++ b/src/components.h
@@ -100,4 +100,22 @@ class MapCollisionComponent : public Component {
100 const Map& map; 100 const Map& map;
101}; 101};
102 102
103class StaticImageComponent : public Component {
104 public:
105 StaticImageComponent(const char* filename);
106 void render(Game& game, Entity& entity, Texture& buffer);
107
108 private:
109 Texture sprite;
110};
111
112class SimpleColliderComponent : public Component {
113 public:
114 SimpleColliderComponent(std::function<void (Entity& collider)> callback);
115 void receive(Game& game, Entity& entity, const Message& msg);
116
117 private:
118 std::function<void (Entity& collider)> callback;
119};
120
103#endif 121#endif
diff --git a/src/game.cpp b/src/game.cpp index a494c5f..e2c1b9c 100644 --- a/src/game.cpp +++ b/src/game.cpp
@@ -120,6 +120,29 @@ void Game::loadMap(const Map& map)
120 nextEntities.push_back(mapEn); 120 nextEntities.push_back(mapEn);
121 nextEntities.push_back(player); 121 nextEntities.push_back(player);
122 122
123 // this is cheating but is just for testing
124 if (&map == &m2)
125 {
126 auto saveEn = std::make_shared<Entity>();
127 saveEn->position = std::make_pair(257.0, 160.0);
128 saveEn->size = std::make_pair(8.0, 11.0);
129
130 auto save_render = std::make_shared<StaticImageComponent>("../res/keyring.png");
131 saveEn->addComponent(save_render);
132
133 auto save_physics = std::make_shared<PhysicsBodyComponent>();
134 saveEn->addComponent(save_physics);
135
136 auto save_collide = std::make_shared<SimpleColliderComponent>([&] (Entity& collider) {
137 playSound("../res/Pickup_Coin23.wav", 0.25);
138
139 saveGame(map, collider.position);
140 });
141 saveEn->addComponent(save_collide);
142
143 nextEntities.push_back(saveEn);
144 }
145
123 newWorld = true; 146 newWorld = true;
124} 147}
125 148