From e18db352e0d0a1bb9dadbd2dc9a17d3987333c16 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Fri, 23 Sep 2022 21:06:21 +0200 Subject: [PATCH] Trabajando en la muerte del jugador --- source/game.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++---- source/game.h | 13 +++++++++-- source/player.cpp | 26 ++++++++++++++++++++++ source/player.h | 6 ++++++ 4 files changed, 94 insertions(+), 6 deletions(-) diff --git a/source/game.cpp b/source/game.cpp index bbda4e7..ca28029 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -95,11 +95,9 @@ void Game::update() map->update(); enemyEngine->update(); player->update(); - if (enemyEngine->checkEnemyCollision(player->getCollider())) - { - debug->add("COLLISION"); - } + checkPlayerEnemyCollisions(); + checkIfPlayerIsAlive(); checkScreenBorders(); updateDebugInfo(); @@ -197,6 +195,8 @@ void Game::checkEventHandler() map = new Map(asset->get("01.map"), renderer, asset, itemTracker); delete player; player = new Player(renderer, asset, input, map, debug, &board.diamonds); + delete enemyEngine; + enemyEngine = new EnemyEngine(renderer, asset, player, map, asset->get(map->getEnemyFile())); break; case SDL_SCANCODE_F: @@ -310,4 +310,51 @@ void Game::reLoadTextures() map->reLoadTextures(); player->reLoadTextures(); scoreboard->reLoadTexture(); +} + +// Comprueba las colisiones del jugador con los enemigos +bool Game::checkPlayerEnemyCollisions() +{ + if (enemyEngine->checkEnemyCollision(player->getCollider())) + { + debug->add("COLLISION"); + player->setLivingState(l_dead); + return true; + } + return false; +} + +// Comprueba si el jugador esta vivo +void Game::checkIfPlayerIsAlive() +{ + if (player->getLivingState() == l_dead) + { + killPlayer(); + } +} + +// Mata al jugador +void Game::killPlayer() +{ + // if (player->getInvincible()) + //{ + // return; + // } + + board.lives--; + + // Destruye el mapa, el jugador y los enemigos + //delete map; + delete player; + //delete enemyEngine; + + // Sonido + // JA_PlaySound(deathSound); + + // setBlackScreen(); + + // Crea el nuevo mapa, el nuevo jugador y nuevos enemigos + //map = new Map(asset->get("01.map"), renderer, asset, itemTracker); + player = new Player(renderer, asset, input, map, debug, &board.diamonds); + //enemyEngine = new EnemyEngine(renderer, asset, player, map, asset->get(map->getEnemyFile())); } \ No newline at end of file diff --git a/source/game.h b/source/game.h index bb23a4a..7a4c15a 100644 --- a/source/game.h +++ b/source/game.h @@ -34,8 +34,8 @@ private: Debug *debug; // Objeto para gestionar la información de debug SDL_Texture *spriteLayer; // Textura para dibujar los sprites section_t section; // Seccion actual dentro del programa - Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa - Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa + Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa + Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa bool musicEnabled; // Indica si la musica puede sonar o no // Actualiza el juego, las variables, comprueba la entrada, etc. @@ -68,6 +68,15 @@ private: // Recarga las texturas void reLoadTextures(); + // Comprueba las colisiones del jugador con los enemigos + bool checkPlayerEnemyCollisions(); + + // Comprueba si el jugador esta vivo + void checkIfPlayerIsAlive(); + + // Mata al jugador + void killPlayer(); + public: // Constructor Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Debug *debug); diff --git a/source/player.cpp b/source/player.cpp index 666dd5c..b0b00e7 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -525,4 +525,30 @@ SDL_Rect &Player::getCollider() // Comprueba los estados de vida void Player::checkLivingState() { + switch (living) + { + case l_alive: + break; + + case l_dying: + break; + + case l_dead: + break; + + default: + break; + } +} + +// Establece el estado de vida del jugador +void Player::setLivingState(e_living value) +{ + living = value; +} + +// Obtiene el estado de vida del jugador +e_living Player::getLivingState() +{ + return living; } \ No newline at end of file diff --git a/source/player.h b/source/player.h index 0aab6bf..f466b9b 100644 --- a/source/player.h +++ b/source/player.h @@ -142,6 +142,12 @@ public: // Obtiene el rectangulo de colision del jugador SDL_Rect &getCollider(); + + // Establece el estado de vida del jugador + void setLivingState(e_living value); + + // Obtiene el estado de vida del jugador + e_living getLivingState(); }; #endif