bugfix: player could fire and get items after death

This commit is contained in:
2021-02-20 19:04:13 +01:00
parent a8eff04d6a
commit 190f1e9a47

View File

@@ -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)))