diff --git a/source/fade.cpp b/source/fade.cpp index 3091cf5..e4f6830 100644 --- a/source/fade.cpp +++ b/source/fade.cpp @@ -43,6 +43,14 @@ void Fade::init() fadeRandomSquaresMult = param->fadeRandomSquaresMult; } +// Resetea algunas variables para volver a hacer el fade sin perder ciertos parametros +void Fade::reset() +{ + enabled = false; + finished = false; + counter = 0; +} + // Pinta una transición en pantalla void Fade::render() { @@ -61,8 +69,12 @@ void Fade::update() { case FADE_FULLSCREEN: { - // Modifica la transparencia de la textura - a = std::min(counter * 4, 255); + // Modifica la transparencia de la + if (mode == FADE_OUT) + a = std::min(counter * 4, 255); + else + a = 255 - std::min(counter * 4, 255); + SDL_SetTextureAlphaMod(backbuffer, a); // Comprueba si ha terminado diff --git a/source/fade.h b/source/fade.h index 0b5c9b1..23b0a8e 100644 --- a/source/fade.h +++ b/source/fade.h @@ -57,6 +57,9 @@ public: // Destructor ~Fade(); + // Resetea algunas variables para volver a hacer el fade sin perder ciertos parametros + void reset(); + // Pinta una transición en pantalla void render(); diff --git a/source/hiscore_table.cpp b/source/hiscore_table.cpp index 86a5d76..77a0f29 100644 --- a/source/hiscore_table.cpp +++ b/source/hiscore_table.cpp @@ -24,6 +24,15 @@ HiScoreTable::HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, backbuffer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param->gameWidth, param->gameHeight); SDL_SetTextureBlendMode(backbuffer, SDL_BLENDMODE_BLEND); + // Inicializa variables + section->name = SECTION_PROG_HI_SCORE_TABLE; + ticks = 0; + ticksSpeed = 15; + counter = 0; + counterEnd = 800; + viewArea = {0, 0, param->gameWidth, param->gameHeight}; + fadeMode = FADE_IN; + // Inicializa objetos background->setSrcDest(windowArea); background->setDstDest(windowArea); @@ -33,18 +42,9 @@ HiScoreTable::HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, fade->setColor(fadeColor.r, fadeColor.g, fadeColor.b); fade->setType(FADE_RANDOM_SQUARE); fade->setPost(param->fadePostDuration); - fade->setMode(FADE_IN); + fade->setMode(fadeMode); fade->activate(); - // Inicializa variables - section->name = SECTION_PROG_HI_SCORE_TABLE; - ticks = 0; - ticksSpeed = 15; - manualQuit = false; - counter = 0; - counterEnd = 800; - viewArea = {0, 0, param->gameWidth, param->gameHeight}; - // Crea el contenido de la textura con la lista de puntuaciones fillTexture(); } @@ -71,13 +71,14 @@ void HiScoreTable::update() // Actualiza el fondo background->update(); - fade->update(); + // Gestiona el fade + updateFade(); counter++; if (counter == counterEnd) { - section->name = SECTION_PROG_INSTRUCTIONS; + fade->activate(); } } } @@ -247,4 +248,22 @@ std::string HiScoreTable::scoreToString(Uint32 num) } return (std::to_string(num)); +} + +// Gestiona el fade +void HiScoreTable::updateFade() +{ + fade->update(); + + if (fade->hasEnded() && fadeMode == FADE_IN) + { + fade->reset(); + fadeMode = FADE_OUT; + fade->setMode(fadeMode); + } + + if (fade->hasEnded() && fadeMode == FADE_OUT) + { + section->name = SECTION_PROG_INSTRUCTIONS; + } } \ No newline at end of file diff --git a/source/hiscore_table.h b/source/hiscore_table.h index c487150..b4631bf 100644 --- a/source/hiscore_table.h +++ b/source/hiscore_table.h @@ -36,12 +36,12 @@ private: param_t *param; // Puntero con todos los parametros del programa // Variables - Uint16 counter; // Contador - Uint16 counterEnd; // Valor final para el contador - Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa - Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa - bool manualQuit; // Indica si se quiere salir del modo manual - SDL_Rect viewArea; // Parte de la textura que se muestra en pantalla + Uint16 counter; // Contador + Uint16 counterEnd; // Valor final para el contador + Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa + Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa + SDL_Rect viewArea; // Parte de la textura que se muestra en pantalla + int fadeMode; // Modo de fade a utilizar // Actualiza las variables void update(); @@ -64,6 +64,9 @@ private: // Recarga todas las texturas void reloadTextures(); + // Gestiona el fade + void updateFade(); + public: // Constructor HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang, param_t *param, options_t *options, section_t *section); diff --git a/source/instructions.cpp b/source/instructions.cpp index 7e8589b..6abc861 100644 --- a/source/instructions.cpp +++ b/source/instructions.cpp @@ -13,10 +13,11 @@ Instructions::Instructions(SDL_Renderer *renderer, Screen *screen, Asset *asset, this->param = param; this->section = section; - // Creao objetos + // Crea objetos eventHandler = new SDL_Event(); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); tiledbg = new Tiledbg(renderer, screen, asset, {0, 0, param->gameWidth, param->gameHeight}, TILED_MODE_STATIC); + fade = new Fade(renderer, param); // Crea un backbuffer para el renderizador backbuffer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param->gameWidth, param->gameHeight); @@ -35,6 +36,13 @@ Instructions::Instructions(SDL_Renderer *renderer, Screen *screen, Asset *asset, view = {0, 0, param->gameWidth, param->gameHeight}; spritePos = {0, 0}; + // Inicializa objetos + fade->setColor(fadeColor.r, fadeColor.g, fadeColor.b); + fade->setType(FADE_FULLSCREEN); + fade->setPost(param->fadePostDuration); + fade->setMode(FADE_IN); + fade->activate(); + // Rellena la textura de texto fillTexture(); @@ -61,6 +69,7 @@ Instructions::~Instructions() delete eventHandler; delete text; delete tiledbg; + delete fade; SDL_DestroyTexture(backbuffer); SDL_DestroyTexture(texture); @@ -233,6 +242,8 @@ void Instructions::update() // Actualiza el mosaico de fondo tiledbg->update(); + fade->update(); + if (counter == counterEnd) { section->name = SECTION_PROG_TITLE; @@ -262,6 +273,8 @@ void Instructions::render() // Copia la textura y el backbuffer al renderizador SDL_RenderCopy(renderer, backbuffer, nullptr, &view); + fade->render(); + // Vuelca el contenido del renderizador en pantalla screen->blit(); } diff --git a/source/instructions.h b/source/instructions.h index f36fac3..93c6b38 100644 --- a/source/instructions.h +++ b/source/instructions.h @@ -11,6 +11,7 @@ #include "const.h" #include "lang.h" #include "tiledbg.h" +#include "fade.h" #ifndef INSTRUCTIONS_H #define INSTRUCTIONS_H @@ -32,6 +33,7 @@ private: Lang *lang; // Objeto para gestionar los textos en diferentes idiomas Text *text; // Objeto para escribir texto Tiledbg *tiledbg; // Objeto para dibujar el mosaico animado de fondo + Fade *fade; // Objeto para renderizar fades section_t *section; // Estado del bucle principal para saber si continua o se sale param_t *param; // Puntero con todos los parametros del programa