Pantalla de game over completada (faltaria añadir un sonido o musica)

This commit is contained in:
2022-11-06 19:58:16 +01:00
parent 232842d876
commit 20d51a113a
3 changed files with 56 additions and 13 deletions

View File

@@ -448,11 +448,21 @@ void Director::loadResources(section_t section)
else if (section.name == SECTION_PROG_GAME_OVER)
{
// Texturas
std::vector<std::string> textureList;
textureList.push_back("smb2.png");
textureList.push_back("player_game_over.png");
textureList.push_back("tv.png");
resource->loadTextures(textureList);
// Animaciones
std::vector<std::string> animationList;
animationList.push_back("player_game_over.ani");
animationList.push_back("tv.ani");
resource->loadAnimations(animationList);
// Offsets
std::vector<std::string> offsetsList;
offsetsList.push_back("smb2.txt");

View File

@@ -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<std::string> 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();
}

View File

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