Resueltos los dos últimos problemas
This commit is contained in:
260
source/game.cpp
260
source/game.cpp
@@ -2462,6 +2462,22 @@ void Game::createItemScoreSprite(int x, int y, SmartSprite *sprite)
|
||||
ss->setEnabledCounter(100);
|
||||
}
|
||||
|
||||
// Vacia el vector de smartsprites
|
||||
void Game::freeSmartSprites()
|
||||
{
|
||||
if (smartSprites.empty() == false)
|
||||
{
|
||||
for (int i = smartSprites.size() - 1; i >= 0; --i)
|
||||
{
|
||||
if (smartSprites.at(i)->hasFinished())
|
||||
{
|
||||
delete smartSprites.at(i);
|
||||
smartSprites.erase(smartSprites.begin() + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Dibuja el efecto de flash
|
||||
void Game::renderFlashEffect()
|
||||
{
|
||||
@@ -2662,63 +2678,77 @@ void Game::updateEnemyDeployCounter()
|
||||
}
|
||||
}
|
||||
|
||||
// Actualiza el campo de juego
|
||||
void Game::updatePlayField()
|
||||
// Actualiza el juego
|
||||
void Game::update()
|
||||
{
|
||||
// Comprueba el teclado/mando
|
||||
checkGameInput();
|
||||
// Comprueba los eventos que hay en cola
|
||||
checkEventHandler();
|
||||
|
||||
// Actualiza las variables del jugador
|
||||
updatePlayer();
|
||||
|
||||
// Actualiza el fondo
|
||||
updateBackground();
|
||||
|
||||
// Mueve los globos
|
||||
updateBalloons();
|
||||
|
||||
// Mueve las balas
|
||||
moveBullets();
|
||||
|
||||
// Actualiza los items
|
||||
updateItems();
|
||||
|
||||
// Actualiza el valor de mCurrentStage
|
||||
updateStage();
|
||||
|
||||
// Actualiza el estado de muerte
|
||||
updateDeath();
|
||||
|
||||
// Actualiza los SmartSprites
|
||||
updateSmartSprites();
|
||||
|
||||
// Actualiza los contadores de estado y efectos
|
||||
updateTimeStoppedCounter();
|
||||
updateEnemyDeployCounter();
|
||||
updateShakeEffect();
|
||||
|
||||
// Actualiza el ayudante
|
||||
updateHelper();
|
||||
|
||||
// Comprueba las colisiones entre globos y balas
|
||||
checkBulletBalloonCollision();
|
||||
|
||||
// Comprueba el nivel de amenaza para ver si se han de crear nuevos enemigos
|
||||
if (!mGameCompleted)
|
||||
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
|
||||
if (SDL_GetTicks() - mTicks > mTicksSpeed)
|
||||
{
|
||||
updateMenace();
|
||||
// Actualiza el contador de ticks
|
||||
mTicks = SDL_GetTicks();
|
||||
|
||||
// Actualiza el contador de juego
|
||||
mCounter++;
|
||||
|
||||
// Comprueba el teclado/mando
|
||||
checkGameInput();
|
||||
|
||||
// Actualiza las variables del jugador
|
||||
updatePlayer();
|
||||
|
||||
// Actualiza el fondo
|
||||
updateBackground();
|
||||
|
||||
// Mueve los globos
|
||||
updateBalloons();
|
||||
|
||||
// Mueve las balas
|
||||
moveBullets();
|
||||
|
||||
// Actualiza los items
|
||||
updateItems();
|
||||
|
||||
// Actualiza el valor de mCurrentStage
|
||||
updateStage();
|
||||
|
||||
// Actualiza el estado de muerte
|
||||
updateDeath();
|
||||
|
||||
// Actualiza los SmartSprites
|
||||
updateSmartSprites();
|
||||
|
||||
// Actualiza los contadores de estado y efectos
|
||||
updateTimeStoppedCounter();
|
||||
updateEnemyDeployCounter();
|
||||
updateShakeEffect();
|
||||
|
||||
// Actualiza el ayudante
|
||||
updateHelper();
|
||||
|
||||
// Comprueba las colisiones entre globos y balas
|
||||
checkBulletBalloonCollision();
|
||||
|
||||
// Comprueba el nivel de amenaza para ver si se han de crear nuevos enemigos
|
||||
if (!mGameCompleted)
|
||||
{
|
||||
updateMenace();
|
||||
}
|
||||
|
||||
// Actualiza la velocidad de los enemigos
|
||||
updateBalloonSpeed();
|
||||
|
||||
// Actualiza el tramo final de juego, una vez completado
|
||||
updateGameCompleted();
|
||||
|
||||
// Vacia los vectores
|
||||
freeBullets();
|
||||
freeBalloons();
|
||||
freeItems();
|
||||
freeSmartSprites();
|
||||
}
|
||||
|
||||
// Actualiza la velocidad de los enemigos
|
||||
updateBalloonSpeed();
|
||||
|
||||
// Actualiza el tramo final de juego, una vez completado
|
||||
updateGameCompleted();
|
||||
|
||||
// Vacia los vectores
|
||||
freeBullets();
|
||||
freeBalloons();
|
||||
freeItems();
|
||||
}
|
||||
|
||||
// Actualiza el fondo
|
||||
@@ -2788,9 +2818,16 @@ void Game::renderBackground()
|
||||
mSpriteGrass->render();
|
||||
}
|
||||
|
||||
// Dibuja el campo de juego
|
||||
void Game::renderPlayField()
|
||||
// Dibuja el juego
|
||||
void Game::render()
|
||||
{
|
||||
// Prepara para empezar a dibujar en la textura de juego
|
||||
mScreen->start();
|
||||
|
||||
// Limpia la pantalla
|
||||
mScreen->clean(bgColor);
|
||||
|
||||
// Dibuja los objetos
|
||||
renderBackground();
|
||||
renderBalloons();
|
||||
renderBullets();
|
||||
@@ -2817,6 +2854,12 @@ void Game::renderPlayField()
|
||||
renderFlashEffect();
|
||||
|
||||
mText->write(0, 0, std::to_string(balloons.size()));
|
||||
|
||||
// Pinta la informacion de debug
|
||||
renderDebugInfo();
|
||||
|
||||
// Vuelca el contenido del renderizador en pantalla
|
||||
mScreen->blit();
|
||||
}
|
||||
|
||||
// Gestiona el nivel de amenaza
|
||||
@@ -3193,44 +3236,11 @@ section_t Game::run()
|
||||
}
|
||||
}
|
||||
|
||||
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
|
||||
if (SDL_GetTicks() - mTicks > mTicksSpeed)
|
||||
{
|
||||
// Actualiza el contador de ticks
|
||||
mTicks = SDL_GetTicks();
|
||||
|
||||
// Actualiza el contador de juego
|
||||
mCounter++;
|
||||
|
||||
// Comprueba los eventos que hay en la cola
|
||||
while (SDL_PollEvent(mEventHandler) != 0)
|
||||
{
|
||||
// Evento de salida de la aplicación
|
||||
if (mEventHandler->type == SDL_QUIT)
|
||||
{
|
||||
mSection.name = PROG_SECTION_QUIT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Actualiza la lógica del juego
|
||||
updatePlayField();
|
||||
}
|
||||
|
||||
// Prepara para empezar a dibujar en la textura de juego
|
||||
mScreen->start();
|
||||
|
||||
// Limpia la pantalla
|
||||
mScreen->clean(bgColor);
|
||||
// Actualiza la lógica del juego
|
||||
update();
|
||||
|
||||
// Dibuja los objetos
|
||||
renderPlayField();
|
||||
|
||||
// Pinta la informacion de debug
|
||||
renderDebugInfo();
|
||||
|
||||
// Vuelca el contenido del renderizador en pantalla
|
||||
mScreen->blit();
|
||||
render();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3246,15 +3256,7 @@ void Game::runPausedGame()
|
||||
while ((mSection.subsection == GAME_SECTION_PAUSE) && (mSection.name == PROG_SECTION_GAME))
|
||||
{
|
||||
// Comprueba los eventos que hay en la cola
|
||||
while (SDL_PollEvent(mEventHandler) != 0)
|
||||
{
|
||||
// Evento de salida de la aplicación
|
||||
if (mEventHandler->type == SDL_QUIT)
|
||||
{
|
||||
mSection.name = PROG_SECTION_QUIT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
checkEventHandler();
|
||||
|
||||
// Calcula la lógica de los objetos
|
||||
if (SDL_GetTicks() - mTicks > mTicksSpeed)
|
||||
@@ -3281,7 +3283,37 @@ void Game::runPausedGame()
|
||||
mScreen->clean(bgColor);
|
||||
|
||||
// Pinta el escenario
|
||||
renderPlayField();
|
||||
{
|
||||
renderBackground();
|
||||
renderBalloons();
|
||||
renderBullets();
|
||||
renderMessages();
|
||||
renderItems();
|
||||
renderSmartSprites();
|
||||
renderScoreBoard();
|
||||
|
||||
for (auto player : players)
|
||||
{
|
||||
player->render();
|
||||
}
|
||||
|
||||
if ((mDeathCounter <= 150) && !players.at(0)->isAlive())
|
||||
{
|
||||
renderDeathFade(150 - mDeathCounter);
|
||||
}
|
||||
|
||||
if ((mGameCompleted) && (mGameCompletedCounter >= 300))
|
||||
{
|
||||
renderDeathFade(mGameCompletedCounter - 300);
|
||||
}
|
||||
|
||||
renderFlashEffect();
|
||||
|
||||
mText->write(0, 0, std::to_string(balloons.size()));
|
||||
|
||||
// Pinta la informacion de debug
|
||||
renderDebugInfo();
|
||||
}
|
||||
mMenuPause->render();
|
||||
mFade->render();
|
||||
|
||||
@@ -3599,4 +3631,30 @@ bool Game::allPlayersAreDead()
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
// Comprueba los eventos que hay en cola
|
||||
void Game::checkEventHandler()
|
||||
{
|
||||
while (SDL_PollEvent(mEventHandler) != 0)
|
||||
{
|
||||
// Evento de salida de la aplicación
|
||||
if (mEventHandler->type == SDL_QUIT)
|
||||
{
|
||||
mSection.name = PROG_SECTION_QUIT;
|
||||
break;
|
||||
}
|
||||
else if (mEventHandler->type == SDL_KEYDOWN && mEventHandler->key.repeat == 0)
|
||||
{
|
||||
switch (mEventHandler->key.keysym.scancode)
|
||||
{
|
||||
case SDL_SCANCODE_P:
|
||||
createPowerBall();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user