From 20d51a113a76d99d37575ada5e2591501ff1c0ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Sun, 6 Nov 2022 19:58:16 +0100 Subject: [PATCH] =?UTF-8?q?Pantalla=20de=20game=20over=20completada=20(fal?= =?UTF-8?q?taria=20a=C3=B1adir=20un=20sonido=20o=20musica)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/director.cpp | 10 ++++++++++ source/game_over.cpp | 40 ++++++++++++++++++++++++++++++++++------ source/game_over.h | 19 ++++++++++++------- 3 files changed, 56 insertions(+), 13 deletions(-) diff --git a/source/director.cpp b/source/director.cpp index 6782cdf..ad6d130 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -448,11 +448,21 @@ void Director::loadResources(section_t section) else if (section.name == SECTION_PROG_GAME_OVER) { + // Texturas std::vector textureList; textureList.push_back("smb2.png"); + textureList.push_back("player_game_over.png"); + textureList.push_back("tv.png"); resource->loadTextures(textureList); + // Animaciones + std::vector animationList; + animationList.push_back("player_game_over.ani"); + animationList.push_back("tv.ani"); + + resource->loadAnimations(animationList); + // Offsets std::vector offsetsList; offsetsList.push_back("smb2.txt"); diff --git a/source/game_over.cpp b/source/game_over.cpp index 959a472..ba6d4d7 100644 --- a/source/game_over.cpp +++ b/source/game_over.cpp @@ -13,6 +13,8 @@ GameOver::GameOver(SDL_Renderer *renderer, Screen *screen, Resource *resource, A // Reserva memoria para los punteros a objetos eventHandler = new SDL_Event(); text = new Text(resource->getOffset("smb2.txt"), resource->getTexture("smb2.png"), renderer); + playerSprite = new AnimatedSprite(renderer, resource->getAnimation("player_game_over.ani")); + tvSprite = new AnimatedSprite(renderer, resource->getAnimation("tv.ani")); // Inicializa variables counter = 0; @@ -20,9 +22,13 @@ GameOver::GameOver(SDL_Renderer *renderer, Screen *screen, Resource *resource, A section.subsection = 0; ticks = 0; ticksSpeed = 15; - endSection = 300; - iniFade = 210; - fadeLenght = 30; + endSection = 350; + iniFade = 260; + fadeLenght = 20; + playerSprite->setPosX(GAMECANVAS_CENTER_X + 10); + playerSprite->setPosY(GAMECANVAS_CENTER_Y + 10); + tvSprite->setPosX(GAMECANVAS_CENTER_X - tvSprite->getAnimationClip(0, 0).w - 10); + tvSprite->setPosY(GAMECANVAS_CENTER_Y + 10); // Inicializa el vector de colores const std::vector colorList = {"white", "yellow", "cyan", "green", "magenta", "red", "blue", "black"}; @@ -39,6 +45,8 @@ GameOver::~GameOver() // Libera la memoria de los objetos delete eventHandler; delete text; + delete playerSprite; + delete tvSprite; } // Actualiza el objeto @@ -56,11 +64,18 @@ void GameOver::update() // Actualiza el color usado para renderizar los textos e imagenes updateColor(); + // Actualiza los dos sprites + playerSprite->update(); + tvSprite->update(); + + // Actualiza el contador counter++; + // Comprueba si ha terminado la sección if (counter == endSection) { - section.name = SECTION_PROG_TITLE; + section.name = SECTION_PROG_LOGO; + section.subsection = SUBSECTION_LOGO_TO_TITLE; } } } @@ -75,9 +90,12 @@ void GameOver::render() screen->clean(); // Escribe el texto de GAME OVER - text->writeDX(TXT_CENTER | TXT_COLOR, GAMECANVAS_CENTER_X, GAMECANVAS_CENTER_Y, "G A M E O V E R", 1, color); + text->writeDX(TXT_CENTER | TXT_COLOR, GAMECANVAS_CENTER_X, GAMECANVAS_CENTER_Y - 20, "G A M E O V E R", 1, color); - text->write(0, 0, std::to_string(counter)); + // Dibuja los sprites + renderSprites(); + + // text->write(0, 0, std::to_string(counter)); // Vuelca el contenido del renderizador en pantalla screen->blit(); @@ -167,4 +185,14 @@ void GameOver::updateColor() const float step = std::min(std::max(counter, iniFade) - iniFade, fadeLenght) / (float)fadeLenght; const int index = (colors.size() - 1) * step; color = colors.at(index); +} + +// Dibuja los sprites +void GameOver::renderSprites() +{ + playerSprite->getTexture()->setColor(color.r, color.g, color.b); + playerSprite->render(); + + tvSprite->getTexture()->setColor(color.r, color.g, color.b); + tvSprite->render(); } \ No newline at end of file diff --git a/source/game_over.h b/source/game_over.h index 4ca24b1..7c81a0c 100644 --- a/source/game_over.h +++ b/source/game_over.h @@ -19,13 +19,15 @@ class GameOver { private: // Objetos y punteros - SDL_Renderer *renderer; // El renderizador de la ventana - Screen *screen; // Objeto encargado de dibujar en pantalla - Resource *resource; // Objeto con los recursos - Asset *asset; // Objeto con los ficheros de recursos - options_t *options; // Puntero a las opciones del juego - SDL_Event *eventHandler; // Manejador de eventos - Text *text; // Objeto para escribir texto en pantalla + SDL_Renderer *renderer; // El renderizador de la ventana + Screen *screen; // Objeto encargado de dibujar en pantalla + Resource *resource; // Objeto con los recursos + Asset *asset; // Objeto con los ficheros de recursos + options_t *options; // Puntero a las opciones del juego + SDL_Event *eventHandler; // Manejador de eventos + Text *text; // Objeto para escribir texto en pantalla + AnimatedSprite *playerSprite; // Sprite con el jugador + AnimatedSprite *tvSprite; // Sprite con el televisor // Variables int counter; // Contador @@ -50,6 +52,9 @@ private: // Actualiza el color usado para renderizar los textos e imagenes void updateColor(); + // Dibuja los sprites + void renderSprites(); + public: // Constructor GameOver(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options);