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;
}
// 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

View File

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

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

View File

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

View File

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

View File

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