From d41c77ab967fba917d07502bb5a7f888147bb82d Mon Sep 17 00:00:00 2001 From: zv0n Date: Sat, 8 Apr 2023 19:43:36 +0200 Subject: [PATCH] Mario: enable death from bounce for Goomba --- mario/blocks/goombablock.cpp | 5 ++++- mario/visitors/goomba_visitor.cpp | 6 ++++++ mario/visitors/goomba_visitor.hpp | 4 ++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/mario/blocks/goombablock.cpp b/mario/blocks/goombablock.cpp index 77531e0..2f93330 100644 --- a/mario/blocks/goombablock.cpp +++ b/mario/blocks/goombablock.cpp @@ -64,11 +64,14 @@ void GoombaBlock::handleVisitor(SDLPP::Visitor &visitor) { setPos(g_visitor.getValidXPos(), getPos().getY()); setMovement(-getMovement().getX(), getMovement().getY()); } + if (g_visitor.shouldBounce()) { + setMovement(getMovement().getX(), -0.5); + } if (g_visitor.isDead()) { removeCollisions(); pauseAnimation(); setBaseRect(GOOMBA_DEATH_SRC); - setMovement(0, 0); + setMovement(0, getMovement().getY()); startDeath(); // destroy(); } diff --git a/mario/visitors/goomba_visitor.cpp b/mario/visitors/goomba_visitor.cpp index ac90b47..af9ba3e 100644 --- a/mario/visitors/goomba_visitor.cpp +++ b/mario/visitors/goomba_visitor.cpp @@ -7,10 +7,16 @@ void GoombaVisitor::visit(const SDLPP::RenderObject &obj) { auto id = obj.getId(); + auto marioBlock = reinterpret_cast(obj); switch (id) { case FLOOR_ID: case BRICK_ID: case BRICK_TOP_ID: + if(marioBlock.isBouncing()) { + bounce = true; + death = true; + return; + } case PIPE_LEFT_BOTTOM_ID: case PIPE_RIGHT_BOTTOM_ID: case PIPE_LEFT_TOP_ID: diff --git a/mario/visitors/goomba_visitor.hpp b/mario/visitors/goomba_visitor.hpp index df1413f..dc30766 100644 --- a/mario/visitors/goomba_visitor.hpp +++ b/mario/visitors/goomba_visitor.hpp @@ -51,6 +51,9 @@ public: double getValidXPos() const { return validXPos; } + bool shouldBounce() { + return bounce; + } private: bool onGround = false; @@ -58,6 +61,7 @@ private: uint64_t _type{}; bool death = false; bool instant_death = false; + bool bounce = false; uint64_t from = -1; bool left = false; bool right = false;