From ea7dff32a2923af01a0420505d92464f574a2db6 Mon Sep 17 00:00:00 2001 From: zvon Date: Fri, 21 Aug 2020 18:54:42 +0200 Subject: [PATCH] Add hiding of stuff and scene pause --- main.cpp | 11 +++++++++++ sdlpp.hpp | 13 +++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/main.cpp b/main.cpp index 3757e9e..efe1437 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,8 @@ #define STONE_ID 0x00000002 #define DEATH 0x00000003 +bool pause = false; + class Player : public SDLPP::RectangleRender { public: Player(double x, double y, double w, double h, std::shared_ptr &r, double _max_gravity = 1.0, uint32_t _max_gravity_time = 1000) : SDLPP::RectangleRender(x,y,w,h,r) { @@ -139,6 +141,11 @@ void handleKeyDown(SDL_Keycode key, SDLPP::Scene &scene) { case SDLK_r: scene.getRenderer().setRenderColiders(!scene.getRenderer().getRenderColiders()); break; + case SDLK_SPACE: + if(pause) + scene.setPrevTicks(SDL_GetTicks()); + pause = !pause; + break; default: scene.setBackground(bgtextures[4]); break; @@ -191,6 +198,9 @@ void doInput(std::shared_ptr scene) { while(!quit) { SDL_framerateDelay(&gFPS); pollEvents(*scene); + if(pause) + continue; + std::cout << "NOOO" << std::endl; scene->movement(); bool gravity = true; for( auto &x : scene->getCollisions(*player) ) { @@ -204,6 +214,7 @@ void doInput(std::shared_ptr scene) { player->setPos(newPX, newPY); if(player->isGravityEnabled()) player->setLastStand(); + x->setHidden(true); } if( x->getId() == DEATH ) { std::cout << "Oh no, you died!" << std::endl; diff --git a/sdlpp.hpp b/sdlpp.hpp index e1e8a1e..e61262d 100644 --- a/sdlpp.hpp +++ b/sdlpp.hpp @@ -172,7 +172,7 @@ public: virtual std::pair,std::pair> getDoubleRect() = 0; virtual void setPos(double x, double y) = 0; bool colidesWith(const RenderObject &other) const { - if(!hasCollisions() || !other.hasCollisions()) { + if(!hasCollisions() || !other.hasCollisions() || getHidden() || other.getHidden()) { return false; } for( const auto &x : collisions ) { @@ -226,7 +226,7 @@ public: void setHidden(bool hid) { hidden = hid; } - bool getHidden() { + bool getHidden() const { return hidden; } void setColiderColor(const std::string &color) { @@ -283,6 +283,8 @@ public: prev_ticks = now_ticks; } std::vector> getCollisions(RenderObject &r) { + if(r.getHidden()) + return {}; std::vector> ret{}; for(const auto &x : collisionObjects) { if(x->colidesWith(r)) { @@ -336,6 +338,9 @@ public: Renderer &getRenderer() { return *renderer; } + void setPrevTicks(int ticks) { + prev_ticks = ticks; + } private: std::vector> renderObjects; std::vector> collisionObjects; @@ -369,9 +374,9 @@ public: setTexture(texture); } virtual void render() { - if(texture != NULL) + if(texture != NULL && !getHidden()) SDL_RenderCopy(renderer->getRendererPtr(), texture->getTexturePtr(), NULL, &rect); - if(hasCollisions() && renderer->getRenderColiders()) { + if(hasCollisions() && renderer->getRenderColiders() && !getHidden()) { for(const auto &col : getCollisions()) col->render(*renderer, colider_color); }