From bdf50ff543c73c83cc7a06426bc2a6fe66616b87 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Fri, 13 Mar 2015 14:02:07 -0400 Subject: Added a checkpoint --- res/Pickup_Coin23.wav | Bin 0 -> 29596 bytes res/keyring.png | Bin 0 -> 162 bytes src/components.cpp | 27 +++++++++++++++++++++++++++ src/components.h | 18 ++++++++++++++++++ src/game.cpp | 23 +++++++++++++++++++++++ 5 files changed, 68 insertions(+) create mode 100644 res/Pickup_Coin23.wav create mode 100644 res/keyring.png diff --git a/res/Pickup_Coin23.wav b/res/Pickup_Coin23.wav new file mode 100644 index 0000000..5a9916e Binary files /dev/null and b/res/Pickup_Coin23.wav differ diff --git a/res/keyring.png b/res/keyring.png new file mode 100644 index 0000000..082f4de Binary files /dev/null and b/res/keyring.png differ 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 return false; } + +// Static image + +StaticImageComponent::StaticImageComponent(const char* filename) : sprite(Texture(filename)) +{ + +} + +void StaticImageComponent::render(Game&, Entity& entity, Texture& buffer) +{ + buffer.blit(sprite, sprite.entirety(), {(int) entity.position.first, (int) entity.position.second, entity.size.first, entity.size.second}); +} + +// Simple collision + +SimpleColliderComponent::SimpleColliderComponent(std::function callback) : callback(callback) +{ + +} + +void SimpleColliderComponent::receive(Game&, Entity&, const Message& msg) +{ + if (msg.type == Message::Type::collision) + { + callback(*(msg.collisionEntity)); + } +} 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 { const Map& map; }; +class StaticImageComponent : public Component { + public: + StaticImageComponent(const char* filename); + void render(Game& game, Entity& entity, Texture& buffer); + + private: + Texture sprite; +}; + +class SimpleColliderComponent : public Component { + public: + SimpleColliderComponent(std::function callback); + void receive(Game& game, Entity& entity, const Message& msg); + + private: + std::function callback; +}; + #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) nextEntities.push_back(mapEn); nextEntities.push_back(player); + // this is cheating but is just for testing + if (&map == &m2) + { + auto saveEn = std::make_shared(); + saveEn->position = std::make_pair(257.0, 160.0); + saveEn->size = std::make_pair(8.0, 11.0); + + auto save_render = std::make_shared("../res/keyring.png"); + saveEn->addComponent(save_render); + + auto save_physics = std::make_shared(); + saveEn->addComponent(save_physics); + + auto save_collide = std::make_shared([&] (Entity& collider) { + playSound("../res/Pickup_Coin23.wav", 0.25); + + saveGame(map, collider.position); + }); + saveEn->addComponent(save_collide); + + nextEntities.push_back(saveEn); + } + newWorld = true; } -- cgit 1.4.1