Movidos los efectos shake y flash de la clase game a la clase screen

This commit is contained in:
2024-06-15 12:14:30 +02:00
parent d452f84482
commit a5386a606a
6 changed files with 77 additions and 132 deletions

View File

@@ -244,9 +244,6 @@ void Game::init()
lastEnemyDeploy = 0;
enemyDeployCounter = 0;
enemySpeed = defaultEnemySpeed;
effect.flash = false;
effect.shake = false;
effect.shakeCounter = SHAKE_COUNTER;
helper.needCoffee = false;
helper.needCoffeeMachine = false;
helper.needPowerBall = false;
@@ -1620,8 +1617,8 @@ void Game::updateStage()
stageBitmapCounter = 0;
enemySpeed = defaultEnemySpeed;
setBalloonSpeed(enemySpeed);
effect.flash = true;
effect.shake = true;
screen->flash(flashColor, 5);
screen->shake();
}
// Incrementa el contador del bitmap que aparece mostrando el cambio de fase
@@ -1999,8 +1996,8 @@ void Game::destroyAllBalloons()
enemyDeployCounter = 255;
JA_PlaySound(powerBallSound);
effect.flash = true;
effect.shake = true;
screen->flash(flashColor, 5);
screen->shake();
}
// Detiene todos los globos
@@ -2263,7 +2260,7 @@ void Game::updateItems()
if (item->isOnFloor())
{
JA_PlaySound(coffeeMachineSound);
effect.shake = true;
screen->shake();
}
}
}
@@ -2409,36 +2406,6 @@ void Game::freeSmartSprites()
}
}
// Dibuja el efecto de flash
void Game::renderFlashEffect()
{
if (effect.flash)
{
// Pantallazo blanco
SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderClear(renderer);
effect.flash = false;
}
}
// Actualiza el efecto de agitar la pantalla
void Game::updateShakeEffect()
{
if (effect.shake)
{
if (effect.shakeCounter > 0)
{
effect.shakeCounter--;
}
else
{
effect.shake = false;
effect.shakeCounter = SHAKE_COUNTER;
}
}
}
// Crea un SmartSprite para arrojar el item café al recibir un impacto
void Game::throwCoffee(int x, int y)
{
@@ -2491,13 +2458,14 @@ void Game::killPlayer(Player *player)
player->removeExtraHit();
throwCoffee(player->getPosX() + (player->getWidth() / 2), player->getPosY() + (player->getHeight() / 2));
JA_PlaySound(coffeeOutSound);
screen->shake();
}
else
{
JA_PauseMusic();
stopAllBalloons(10);
JA_PlaySound(playerCollisionSound);
shakeScreen();
screen->shake();
JA_PlaySound(coffeeOutSound);
player->setAlive(false);
if (allPlayersAreDead())
@@ -2629,7 +2597,6 @@ void Game::update()
// Actualiza los contadores de estado y efectos
updateTimeStoppedCounter();
updateEnemyDeployCounter();
updateShakeEffect();
// Actualiza el ayudante
updateHelper();
@@ -2659,7 +2626,7 @@ void Game::updateBackground()
{
// Si el juego está completado, se reduce la velocidad de las nubes
if (gameCompleted)
{
{
if (balloonsPopped > 400)
{
balloonsPopped -= 25;
@@ -2675,8 +2642,8 @@ void Game::updateBackground()
// Aplica la velocidad calculada para las nubes
background->setCloudsSpeed(speed);
const float gradientNumber = std::min(((float)balloonsPopped / 1250.0f), 3.0f);
const float percent = gradientNumber - (int)gradientNumber;
const float gradientNumber = std::min(((float)balloonsPopped / 1250.0f), 3.0f);
const float percent = gradientNumber - (int)gradientNumber;
background->setGradientNumber((int)gradientNumber);
background->setTransition(percent);
@@ -2695,12 +2662,12 @@ void Game::renderSeparator()
// Dibuja los elementos de la zona de juego en su textura
void Game::fillCanvas()
{
//Dibujamos el contenido de la zona de juego en su textura
// Dibujamos el contenido de la zona de juego en su textura
SDL_Texture *temp = SDL_GetRenderTarget(renderer);
SDL_SetRenderTarget(renderer, canvas);
//SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
//SDL_RenderClear(renderer);
// SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
// SDL_RenderClear(renderer);
// Dibuja los objetos
background->render();
@@ -2718,31 +2685,33 @@ void Game::fillCanvas()
// Dibuja el juego
void Game::render()
{
// Dibuja la zona de juego y el marcador
// Dibuja los graficos de la zona de juego en la textura
fillCanvas();
// Prepara para empezar a dibujar en la textura de juego
screen->start();
// Limpia la pantalla
screen->clean(bgColor);
// Copia la textura con la zona de juego a la pantalla
SDL_RenderCopy(renderer, canvas, nullptr, &playArea);
// Dibuja el marcador
scoreboard->render();
// Dibuja el separador del marcador de la zona de juego
renderSeparator();
// Dibuja el sprite del jugador al morir
if ((deathCounter <= 150) && !players[0]->isAlive())
{
renderDeathFade(150 - deathCounter);
}
// Dibuja el fade de fin de juego
if ((gameCompleted) && (gameCompletedCounter >= GAME_COMPLETED_START_FADE))
{
renderDeathFade(gameCompletedCounter - GAME_COMPLETED_START_FADE);
}
renderFlashEffect();
// Vuelca el contenido del renderizador en pantalla
screen->blit();
}
@@ -3060,12 +3029,6 @@ void Game::disableTimeStopItem()
}
}
// Agita la pantalla
void Game::shakeScreen()
{
screen->setShake();
}
// Bucle para el juego
void Game::run()
{
@@ -3208,8 +3171,6 @@ void Game::renderPausedGame()
{
renderDeathFade(gameCompletedCounter - GAME_COMPLETED_START_FADE);
}
renderFlashEffect();
}
if (leavingPauseMenu)