añadidos fade-ins a las secciones

This commit is contained in:
2024-07-09 10:05:09 +02:00
parent 5511160836
commit 2177ad9870
6 changed files with 73 additions and 21 deletions

View File

@@ -43,6 +43,14 @@ void Fade::init()
fadeRandomSquaresMult = param->fadeRandomSquaresMult; 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 // Pinta una transición en pantalla
void Fade::render() void Fade::render()
{ {
@@ -61,8 +69,12 @@ void Fade::update()
{ {
case FADE_FULLSCREEN: case FADE_FULLSCREEN:
{ {
// Modifica la transparencia de la textura // Modifica la transparencia de la
a = std::min(counter * 4, 255); if (mode == FADE_OUT)
a = std::min(counter * 4, 255);
else
a = 255 - std::min(counter * 4, 255);
SDL_SetTextureAlphaMod(backbuffer, a); SDL_SetTextureAlphaMod(backbuffer, a);
// Comprueba si ha terminado // Comprueba si ha terminado

View File

@@ -57,6 +57,9 @@ public:
// Destructor // Destructor
~Fade(); ~Fade();
// Resetea algunas variables para volver a hacer el fade sin perder ciertos parametros
void reset();
// Pinta una transición en pantalla // Pinta una transición en pantalla
void render(); void render();

View File

@@ -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); backbuffer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param->gameWidth, param->gameHeight);
SDL_SetTextureBlendMode(backbuffer, SDL_BLENDMODE_BLEND); 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 // Inicializa objetos
background->setSrcDest(windowArea); background->setSrcDest(windowArea);
background->setDstDest(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->setColor(fadeColor.r, fadeColor.g, fadeColor.b);
fade->setType(FADE_RANDOM_SQUARE); fade->setType(FADE_RANDOM_SQUARE);
fade->setPost(param->fadePostDuration); fade->setPost(param->fadePostDuration);
fade->setMode(FADE_IN); fade->setMode(fadeMode);
fade->activate(); 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 // Crea el contenido de la textura con la lista de puntuaciones
fillTexture(); fillTexture();
} }
@@ -71,13 +71,14 @@ void HiScoreTable::update()
// Actualiza el fondo // Actualiza el fondo
background->update(); background->update();
fade->update(); // Gestiona el fade
updateFade();
counter++; counter++;
if (counter == counterEnd) if (counter == counterEnd)
{ {
section->name = SECTION_PROG_INSTRUCTIONS; fade->activate();
} }
} }
} }
@@ -248,3 +249,21 @@ std::string HiScoreTable::scoreToString(Uint32 num)
return (std::to_string(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;
}
}

View File

@@ -36,12 +36,12 @@ private:
param_t *param; // Puntero con todos los parametros del programa param_t *param; // Puntero con todos los parametros del programa
// Variables // Variables
Uint16 counter; // Contador Uint16 counter; // Contador
Uint16 counterEnd; // Valor final para el contador Uint16 counterEnd; // Valor final para el contador
Uint32 ticks; // Contador de ticks para ajustar la velocidad 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 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
SDL_Rect viewArea; // Parte de la textura que se muestra en pantalla int fadeMode; // Modo de fade a utilizar
// Actualiza las variables // Actualiza las variables
void update(); void update();
@@ -64,6 +64,9 @@ private:
// Recarga todas las texturas // Recarga todas las texturas
void reloadTextures(); void reloadTextures();
// Gestiona el fade
void updateFade();
public: public:
// Constructor // Constructor
HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang, param_t *param, options_t *options, section_t *section); HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang, param_t *param, options_t *options, section_t *section);

View File

@@ -13,10 +13,11 @@ Instructions::Instructions(SDL_Renderer *renderer, Screen *screen, Asset *asset,
this->param = param; this->param = param;
this->section = section; this->section = section;
// Creao objetos // Crea objetos
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); 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); 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 // Crea un backbuffer para el renderizador
backbuffer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param->gameWidth, param->gameHeight); 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}; view = {0, 0, param->gameWidth, param->gameHeight};
spritePos = {0, 0}; 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 // Rellena la textura de texto
fillTexture(); fillTexture();
@@ -61,6 +69,7 @@ Instructions::~Instructions()
delete eventHandler; delete eventHandler;
delete text; delete text;
delete tiledbg; delete tiledbg;
delete fade;
SDL_DestroyTexture(backbuffer); SDL_DestroyTexture(backbuffer);
SDL_DestroyTexture(texture); SDL_DestroyTexture(texture);
@@ -233,6 +242,8 @@ void Instructions::update()
// Actualiza el mosaico de fondo // Actualiza el mosaico de fondo
tiledbg->update(); tiledbg->update();
fade->update();
if (counter == counterEnd) if (counter == counterEnd)
{ {
section->name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
@@ -262,6 +273,8 @@ void Instructions::render()
// Copia la textura y el backbuffer al renderizador // Copia la textura y el backbuffer al renderizador
SDL_RenderCopy(renderer, backbuffer, nullptr, &view); SDL_RenderCopy(renderer, backbuffer, nullptr, &view);
fade->render();
// Vuelca el contenido del renderizador en pantalla // Vuelca el contenido del renderizador en pantalla
screen->blit(); screen->blit();
} }

View File

@@ -11,6 +11,7 @@
#include "const.h" #include "const.h"
#include "lang.h" #include "lang.h"
#include "tiledbg.h" #include "tiledbg.h"
#include "fade.h"
#ifndef INSTRUCTIONS_H #ifndef INSTRUCTIONS_H
#define INSTRUCTIONS_H #define INSTRUCTIONS_H
@@ -32,6 +33,7 @@ private:
Lang *lang; // Objeto para gestionar los textos en diferentes idiomas Lang *lang; // Objeto para gestionar los textos en diferentes idiomas
Text *text; // Objeto para escribir texto Text *text; // Objeto para escribir texto
Tiledbg *tiledbg; // Objeto para dibujar el mosaico animado de fondo 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 section_t *section; // Estado del bucle principal para saber si continua o se sale
param_t *param; // Puntero con todos los parametros del programa param_t *param; // Puntero con todos los parametros del programa