From 190f1e9a47d73639043440e4cf6b2dcdedbb778a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Sat, 20 Feb 2021 19:04:13 +0100 Subject: [PATCH] bugfix: player could fire and get items after death --- source/gamedirector.cpp | 103 ++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 58 deletions(-) diff --git a/source/gamedirector.cpp b/source/gamedirector.cpp index 15c621c..233a724 100644 --- a/source/gamedirector.cpp +++ b/source/gamedirector.cpp @@ -1569,20 +1569,6 @@ void GameDirector::updateDeath() // Renderiza el fade final cuando se acaba la partida void GameDirector::renderDeathFade() { - /*if (!mPlayer->isAlive()) - { - SDL_Rect rect = {0, 0, SCREEN_WIDTH, SCREEN_HEIGHT}; - if (mGame.deathCounter < 256) - { - SDL_SetRenderDrawColor(mRenderer, 0x27, 0x27, 0x36, 255 - mGame.deathCounter); - } - else - { - SDL_SetRenderDrawColor(mRenderer, 0x27, 0x27, 0x36, 0); // alpha - 0 trans, 255 opaco - } - SDL_RenderFillRect(mRenderer, &rect); - }*/ - if (!mPlayer->isAlive() && (mGame.deathCounter < 150)) { // 192 / 6 = 32, 6 cuadrados de 32 pixeles @@ -1798,56 +1784,57 @@ bool GameDirector::checkPlayerBallonCollision() // Comprueba la colisión entre el jugador y los items void GameDirector::checkPlayerItemCollision() { - for (Uint8 i = 0; i < MAX_ITEMS; i++) - { - if (mItem[i]->isEnabled()) + if (mPlayer->isAlive()) + for (Uint8 i = 0; i < MAX_ITEMS; i++) { - if (checkCollision(mPlayer->getCollider(), mItem[i]->getCollider())) + if (mItem[i]->isEnabled()) { - switch (mItem[i]->getClass()) + if (checkCollision(mPlayer->getCollider(), mItem[i]->getCollider())) { - case ITEM_POINTS_1_DISK: - mPlayer->addScore(1000); - setScore(mPlayer->getScore()); - updateHiScore(); - createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m1000Bitmap->getWidth() / 2), mItem[i]->getPosY(), m1000Bitmap); - JA_PlaySound(mSound[SOUND_ITEM_PICKUP].sound); - break; - case ITEM_POINTS_2_GAVINA: - mPlayer->addScore(2500); - setScore(mPlayer->getScore()); - updateHiScore(); - createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m2500Bitmap->getWidth() / 2), mItem[i]->getPosY(), m2500Bitmap); - JA_PlaySound(mSound[SOUND_ITEM_PICKUP].sound); - break; - case ITEM_POINTS_3_PACMAR: - mPlayer->addScore(5000); - setScore(mPlayer->getScore()); - updateHiScore(); - createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m5000Bitmap->getWidth() / 2), mItem[i]->getPosY(), m5000Bitmap); - JA_PlaySound(mSound[SOUND_ITEM_PICKUP].sound); - break; - case ITEM_CLOCK: - enableTimeStopItem(); - JA_PlaySound(mSound[SOUND_ITEM_PICKUP].sound); - break; - case ITEM_TNT: - popAllBallons(); - setExplosionTime(true); - JA_PlaySound(mSound[SOUND_TITLE].sound); - break; - case ITEM_COFFEE: - mPlayer->giveExtraHit(); - JA_PlaySound(mSound[SOUND_ITEM_PICKUP].sound); - break; + switch (mItem[i]->getClass()) + { + case ITEM_POINTS_1_DISK: + mPlayer->addScore(1000); + setScore(mPlayer->getScore()); + updateHiScore(); + createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m1000Bitmap->getWidth() / 2), mItem[i]->getPosY(), m1000Bitmap); + JA_PlaySound(mSound[SOUND_ITEM_PICKUP].sound); + break; + case ITEM_POINTS_2_GAVINA: + mPlayer->addScore(2500); + setScore(mPlayer->getScore()); + updateHiScore(); + createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m2500Bitmap->getWidth() / 2), mItem[i]->getPosY(), m2500Bitmap); + JA_PlaySound(mSound[SOUND_ITEM_PICKUP].sound); + break; + case ITEM_POINTS_3_PACMAR: + mPlayer->addScore(5000); + setScore(mPlayer->getScore()); + updateHiScore(); + createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m5000Bitmap->getWidth() / 2), mItem[i]->getPosY(), m5000Bitmap); + JA_PlaySound(mSound[SOUND_ITEM_PICKUP].sound); + break; + case ITEM_CLOCK: + enableTimeStopItem(); + JA_PlaySound(mSound[SOUND_ITEM_PICKUP].sound); + break; + case ITEM_TNT: + popAllBallons(); + setExplosionTime(true); + JA_PlaySound(mSound[SOUND_TITLE].sound); + break; + case ITEM_COFFEE: + mPlayer->giveExtraHit(); + JA_PlaySound(mSound[SOUND_ITEM_PICKUP].sound); + break; - default: - break; + default: + break; + } + mItem[i]->erase(); } - mItem[i]->erase(); } } - } } // Comprueba y procesa la colisión entre las balas y los globos @@ -2557,7 +2544,7 @@ void GameDirector::checkGameInput() } } // Modo Demo no activo - else + else if (mPlayer->isAlive()) { // Tecla izquierda o el mando hacia la izquierda if ((keystates[mKeyboard.left] != 0) || (checkGameController(INPUT_LEFT)))