Commitet pa valgrind, he aprofitat i posat mes make_unique i enum class

This commit is contained in:
2024-10-07 10:49:29 +02:00
parent 4f0ea9dcf2
commit cffa4c3c92
8 changed files with 105 additions and 107 deletions

View File

@@ -1,17 +1,14 @@
#include "fade.h"
#include <SDL2/SDL_blendmode.h> // for SDL_BLENDMODE_BLEND, SDL_BLENDMODE_NONE
#include <SDL2/SDL_pixels.h> // for SDL_PIXELFORMAT_RGBA8888
#include <stdlib.h> // for rand
#include <algorithm> // for min, max
#include "param.h" // for param
#include "utils.h" // for param_t, paramGame_t, paramFade_t
#include <SDL2/SDL_blendmode.h> // for SDL_BLENDMODE_BLEND, SDL_BLENDMODE_NONE
#include <SDL2/SDL_pixels.h> // for SDL_PIXELFORMAT_RGBA8888
#include <stdlib.h> // for rand
#include <algorithm> // for min, max
#include "param.h" // for param
#include "utils.h" // for param_t, paramGame_t, paramFade_t
// Constructor
Fade::Fade(SDL_Renderer *renderer)
Fade::Fade(SDL_Renderer *renderer) : renderer(renderer)
{
// Copia punteros y objetos
this->renderer = renderer;
// Crea la textura donde dibujar el fade
backbuffer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param.game.width, param.game.height);
SDL_SetTextureBlendMode(backbuffer, SDL_BLENDMODE_BLEND);
@@ -30,8 +27,8 @@ Fade::~Fade()
// Inicializa las variables
void Fade::init()
{
type = FADE_CENTER;
mode = FADE_OUT;
type = fadeType::CENTER;
mode = fadeMode::OUT;
enabled = false;
finished = false;
counter = 0;
@@ -70,13 +67,10 @@ void Fade::update()
{
switch (type)
{
case FADE_FULLSCREEN:
case fadeType::FULLSCREEN:
{
// Modifica la transparencia de la
if (mode == FADE_OUT)
a = std::min(counter * 4, 255);
else
a = 255 - std::min(counter * 4, 255);
// Modifica la transparencia
a = mode == fadeMode::OUT ? std::min(counter * 4, 255) : 255 - std::min(counter * 4, 255);
SDL_SetTextureAlphaMod(backbuffer, a);
@@ -89,10 +83,10 @@ void Fade::update()
break;
}
case FADE_CENTER:
case fadeType::CENTER:
{
// Dibuja sobre el backbuffer
SDL_Texture *temp = SDL_GetRenderTarget(renderer);
auto *temp = SDL_GetRenderTarget(renderer);
SDL_SetRenderTarget(renderer, backbuffer);
SDL_SetRenderDrawColor(renderer, r, g, b, a);
@@ -118,12 +112,12 @@ void Fade::update()
break;
}
case FADE_RANDOM_SQUARE:
case fadeType::RANDOM_SQUARE:
{
if (counter % fadeRandomSquaresDelay == 0)
{
// Dibuja sobre el backbuffer
SDL_Texture *temp = SDL_GetRenderTarget(renderer);
auto *temp = SDL_GetRenderTarget(renderer);
SDL_SetRenderTarget(renderer, backbuffer);
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE);
@@ -152,13 +146,13 @@ void Fade::update()
break;
}
case FADE_VENETIAN:
case fadeType::VENETIAN:
{
// Counter debe ir de 0 a 150
if (square.back().h < param.fade.venetianSize)
{
// Dibuja sobre el backbuffer
SDL_Texture *temp = SDL_GetRenderTarget(renderer);
auto *temp = SDL_GetRenderTarget(renderer);
SDL_SetRenderTarget(renderer, backbuffer);
SDL_SetRenderDrawColor(renderer, r, g, b, a);
@@ -170,11 +164,11 @@ void Fade::update()
// Deja el renderizador como estaba
SDL_SetRenderTarget(renderer, temp);
const Uint8 h = counter / 3;
const auto h = counter / 3;
for (int i = 0; i < (int)square.size(); ++i)
{
// A partir del segundo rectangulo se pinta en función del anterior
i == 0 ? square[i].h = h : square[i].h = std::max(square[i - 1].h - 3, 0);
square[i].h = i == 0 ? h : std::max(square[i - 1].h - 3, 0);
}
}
else
@@ -215,14 +209,14 @@ void Fade::activate()
switch (type)
{
case FADE_FULLSCREEN:
case fadeType::FULLSCREEN:
{
// Pinta el backbuffer de color sólido
cleanBackbuffer(r, g, b, 255);
break;
}
case FADE_CENTER:
case fadeType::CENTER:
{
rect1 = {0, 0, param.game.width, 0};
rect2 = {0, 0, param.game.width, 0};
@@ -230,7 +224,7 @@ void Fade::activate()
break;
}
case FADE_RANDOM_SQUARE:
case fadeType::RANDOM_SQUARE:
{
rect1 = {0, 0, param.game.width / numSquaresWidth, param.game.height / numSquaresHeight};
square.clear();
@@ -244,10 +238,10 @@ void Fade::activate()
}
// Desordena el vector de cuadrados
int num = numSquaresWidth * numSquaresHeight;
auto num = numSquaresWidth * numSquaresHeight;
while (num > 1)
{
int num_arreu = rand() % num;
auto num_arreu = rand() % num;
SDL_Rect temp = square[num_arreu];
square[num_arreu] = square[num - 1];
square[num - 1] = temp;
@@ -255,20 +249,20 @@ void Fade::activate()
}
// Limpia la textura
SDL_Texture *temp = SDL_GetRenderTarget(renderer);
auto *temp = SDL_GetRenderTarget(renderer);
SDL_SetRenderTarget(renderer, backbuffer);
a = mode == FADE_OUT ? 0 : 255;
a = mode == fadeMode::OUT ? 0 : 255;
SDL_SetRenderDrawColor(renderer, r, g, b, a);
SDL_RenderClear(renderer);
SDL_SetRenderTarget(renderer, temp);
// Deja el color listo para usar
a = mode == FADE_OUT ? 255 : 0;
a = mode == fadeMode::OUT ? 255 : 0;
break;
}
case FADE_VENETIAN:
case fadeType::VENETIAN:
{
cleanBackbuffer(0, 0, 0, 0);
rect1 = {0, 0, param.game.width, 0};
@@ -290,26 +284,26 @@ void Fade::activate()
}
// Comprueba si está activo
bool Fade::isEnabled()
bool Fade::isEnabled() const
{
return enabled;
}
// Comprueba si ha terminado la transicion
bool Fade::hasEnded()
bool Fade::hasEnded() const
{
// Ha terminado cuando ha finalizado la transición y se ha deshabilitado
return !enabled && finished;
}
// Establece el tipo de fade
void Fade::setType(Uint8 type)
void Fade::setType(fadeType type)
{
this->type = type;
}
// Establece el modo de fade
void Fade::setMode(Uint8 mode)
void Fade::setMode(fadeMode mode)
{
this->mode = mode;
}
@@ -329,10 +323,10 @@ void Fade::setPost(int value)
}
// Limpia el backbuffer
void Fade::cleanBackbuffer(int r, int g, int b, int a)
void Fade::cleanBackbuffer(Uint8 r, Uint8 g, Uint8 b, Uint8 a)
{
// Dibujamos sobre el backbuffer
SDL_Texture *temp = SDL_GetRenderTarget(renderer);
auto *temp = SDL_GetRenderTarget(renderer);
SDL_SetRenderTarget(renderer, backbuffer);
// Pintamos la textura con el color del fade

View File

@@ -1,19 +1,25 @@
#pragma once
#include <SDL2/SDL_rect.h> // for SDL_Rect
#include <SDL2/SDL_render.h> // for SDL_Renderer, SDL_Texture
#include <SDL2/SDL_stdinc.h> // for Uint8, Uint16
#include <vector> // for vector
#include <SDL2/SDL_rect.h> // for SDL_Rect
#include <SDL2/SDL_render.h> // for SDL_Renderer, SDL_Texture
#include <SDL2/SDL_stdinc.h> // for Uint8, Uint16
#include <vector> // for vector
// Tipos de fundido
#define FADE_FULLSCREEN 0
#define FADE_CENTER 1
#define FADE_RANDOM_SQUARE 2
#define FADE_VENETIAN 3
enum class fadeType
{
FULLSCREEN = 0,
CENTER = 1,
RANDOM_SQUARE = 2,
VENETIAN = 3,
};
// Modos de fundido
#define FADE_IN 0
#define FADE_OUT 1
enum class fadeMode
{
IN = 0,
OUT = 1,
};
// Clase Fade
class Fade
@@ -24,17 +30,17 @@ private:
SDL_Texture *backbuffer; // Textura para usar como backbuffer con SDL_TEXTUREACCESS_TARGET
// Variables
Uint8 type; // Tipo de fade a realizar
Uint8 mode; // Modo de fade a realizar
fadeType type; // Tipo de fade a realizar
fadeMode mode; // Modo de fade a realizar
Uint16 counter; // Contador interno
bool enabled; // Indica si el fade está activo
bool finished; // Indica si ha terminado la transición
Uint8 r, g, b, a; // Colores para el fade
SDL_Rect rect1; // Rectangulo usado para crear los efectos de transición
SDL_Rect rect2; // Rectangulo usado para crear los efectos de transición
int numSquaresWidth; // Cantidad total de cuadraditos en horizontal para el FADE_RANDOM_SQUARE
int numSquaresHeight; // Cantidad total de cuadraditos en vertical para el FADE_RANDOM_SQUARE
std::vector<SDL_Rect> square; // Vector con los indices de los cuadrados para el FADE_RANDOM_SQUARE
int numSquaresWidth; // Cantidad total de cuadraditos en horizontal para el fadeType::RANDOM_SQUARE
int numSquaresHeight; // Cantidad total de cuadraditos en vertical para el fadeType::RANDOM_SQUARE
std::vector<SDL_Rect> square; // Vector con los indices de los cuadrados para el fadeType::RANDOM_SQUARE
int fadeRandomSquaresDelay; // Duración entre cada pintado de cuadrados
int fadeRandomSquaresMult; // Cantidad de cuadrados que se pintaran cada vez
int postDuration; // Duración posterior del fade tras finalizar
@@ -44,7 +50,7 @@ private:
void init();
// Limpia el backbuffer
void cleanBackbuffer(int r, int g, int b, int a);
void cleanBackbuffer(Uint8 r, Uint8 g, Uint8 b, Uint8 a);
public:
// Constructor
@@ -66,16 +72,16 @@ public:
void activate();
// Comprueba si ha terminado la transicion
bool hasEnded();
bool hasEnded() const;
// Comprueba si está activo
bool isEnabled();
bool isEnabled() const;
// Establece el tipo de fade
void setType(Uint8 type);
void setType(fadeType type);
// Establece el modo de fade
void setMode(Uint8 mode);
void setMode(fadeMode mode);
// Establece el color del fade
void setColor(Uint8 r, Uint8 g, Uint8 b);

View File

@@ -15,7 +15,7 @@
#include "bullet.h" // for Bullet, BulletType::LEFT, BulletType::RIGHT
#include "enemy_formations.h" // for stage_t, EnemyFormations, enemyIni...
#include "explosions.h" // for Explosions
#include "fade.h" // for Fade, FADE_RANDOM_SQUARE, FADE_VEN...
#include "fade.h" // for Fade, fadeType::RANDOM_SQUARE, FADE_VEN...
#include "global_inputs.h" // for globalInputs::check
#include "input.h" // for inputs_e, Input, INPUT_DO_NOT_ALLO...
#include "item.h" // for Item, ITEM_COFFEE_MACHINE, ITEM_CLOCK
@@ -297,7 +297,7 @@ void Game::init(int playerID)
// Inicializa el objeto para el fundido
fade->setColor(fadeColor.r, fadeColor.g, fadeColor.b);
fade->setPost(param.fade.postDuration);
fade->setType(FADE_VENETIAN);
fade->setType(fadeType::VENETIAN);
// Con los globos creados, calcula el nivel de amenaza
evaluateAndSetMenace();
@@ -861,7 +861,7 @@ void Game::updatePlayers()
if (demo.enabled && allPlayersAreNotPlaying())
{
fade->setType(FADE_RANDOM_SQUARE);
fade->setType(fadeType::RANDOM_SQUARE);
fade->activate();
}
}
@@ -1840,7 +1840,7 @@ void Game::update()
// Activa el fundido antes de acabar con los datos de la demo
if (demo.counter == TOTAL_DEMO_DATA - 200)
{
fade->setType(FADE_RANDOM_SQUARE);
fade->setType(fadeType::RANDOM_SQUARE);
fade->activate();
}

View File

@@ -7,7 +7,6 @@
#include <vector> // for vector
#include "asset.h" // for Asset
#include "background.h" // for Background
#include "fade.h" // for Fade, FADE_IN, FADE_OUT, FADE_RANDOM...
#include "global_inputs.h" // for globalInputs::check
#include "input.h" // for Input
#include "jail_audio.h" // for JA_GetMusicState, JA_Music_state
@@ -19,20 +18,19 @@
#include "utils.h" // for param_t, paramGame_t, hiScoreEntry_t
// Constructor
HiScoreTable::HiScoreTable(JA_Music_t *music)
HiScoreTable::HiScoreTable(JA_Music_t *music) : music(music)
{
// Copia punteros
this->music = music;
asset = Asset::get();
input = Input::get();
screen = Screen::get();
renderer = screen->getRenderer();
// Objetos
eventHandler = new SDL_Event();
fade = new Fade(renderer);
background = new Background(renderer);
text = new Text(asset->get("smb2.gif"), asset->get("smb2.txt"), renderer);
eventHandler = std::make_unique<SDL_Event>();
fade = std::make_unique<Fade>(renderer);
background = std::make_unique<Background>(renderer);
text = std::make_unique<Text>(asset->get("smb2.gif"), asset->get("smb2.txt"), renderer);
// Crea un backbuffer para el renderizador
backbuffer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param.game.width, param.game.height);
@@ -45,7 +43,7 @@ HiScoreTable::HiScoreTable(JA_Music_t *music)
counter = 0;
counterEnd = 800;
viewArea = {0, 0, param.game.width, param.game.height};
fadeMode = FADE_IN;
fadeMode = fadeMode::IN;
// Inicializa objetos
background->setPos(param.game.gameArea.rect);
@@ -53,7 +51,7 @@ HiScoreTable::HiScoreTable(JA_Music_t *music)
background->setGradientNumber(1);
background->setTransition(0.8f);
fade->setColor(fadeColor.r, fadeColor.g, fadeColor.b);
fade->setType(FADE_RANDOM_SQUARE);
fade->setType(fadeType::RANDOM_SQUARE);
fade->setPost(param.fade.postDuration);
fade->setMode(fadeMode);
fade->activate();
@@ -65,10 +63,6 @@ HiScoreTable::HiScoreTable(JA_Music_t *music)
// Destructor
HiScoreTable::~HiScoreTable()
{
delete text;
delete eventHandler;
delete background;
SDL_DestroyTexture(backbuffer);
}
@@ -184,7 +178,7 @@ void HiScoreTable::reloadTextures()
void HiScoreTable::checkEvents()
{
// Comprueba los eventos que hay en la cola
while (SDL_PollEvent(eventHandler) != 0)
while (SDL_PollEvent(eventHandler.get()) != 0)
{
// Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT)
@@ -281,14 +275,14 @@ void HiScoreTable::updateFade()
{
fade->update();
if (fade->hasEnded() && fadeMode == FADE_IN)
if (fade->hasEnded() && fadeMode == fadeMode::IN)
{
fade->reset();
fadeMode = FADE_OUT;
fadeMode = fadeMode::OUT;
fade->setMode(fadeMode);
}
if (fade->hasEnded() && fadeMode == FADE_OUT)
if (fade->hasEnded() && fadeMode == fadeMode::OUT)
{
section::name = section::NAME_INSTRUCTIONS;
}

View File

@@ -1,17 +1,20 @@
#pragma once
#include <SDL2/SDL_events.h> // for SDL_Event
#include <SDL2/SDL_rect.h> // for SDL_Rect
#include <SDL2/SDL_render.h> // for SDL_Renderer, SDL_Texture
#include <SDL2/SDL_stdinc.h> // for Uint16, Uint32
#include <string> // for string
#include "section.h" // for options_e
#include <SDL2/SDL_events.h> // for SDL_Event
#include <SDL2/SDL_rect.h> // for SDL_Rect
#include <SDL2/SDL_render.h> // for SDL_Renderer, SDL_Texture
#include <SDL2/SDL_stdinc.h> // for Uint16, Uint32
#include <memory>
#include <string> // for string
#include "fade.h"
#include "section.h" // for options_e
#include "background.h"
#include "text.h"
class Asset;
class Background;
class Fade;
class Input;
class Screen;
class Text;
struct JA_Music_t;
/*
@@ -31,22 +34,23 @@ private:
// Objetos y punteros
SDL_Renderer *renderer; // El renderizador de la ventana
Screen *screen; // Objeto encargado de dibujar en pantalla
SDL_Event *eventHandler; // Manejador de eventos
SDL_Texture *backbuffer; // Textura para usar como backbuffer
Asset *asset; // Objeto que gestiona todos los ficheros de recursos
Input *input; // Objeto pata gestionar la entrada
Background *background; // Objeto para dibujar el fondo del juego
Fade *fade; // Objeto para renderizar fades
Text *text; // Objeto para escribir texto
JA_Music_t *music; // Musica de fondo
std::unique_ptr<Fade> fade; // Objeto para renderizar fades
std::unique_ptr<Background> background; // Objeto para dibujar el fondo del juego
std::unique_ptr<SDL_Event> eventHandler; // Manejador de eventos
std::unique_ptr<Text> text; // Objeto para escribir texto
// 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
SDL_Rect viewArea; // Parte de la textura que se muestra en pantalla
int fadeMode; // Modo de fade a utilizar
fadeMode fadeMode; // Modo de fade a utilizar
// Actualiza las variables
void update();

View File

@@ -6,7 +6,7 @@
#include <algorithm> // for max
#include <string> // for basic_string
#include "asset.h" // for Asset
#include "fade.h" // for Fade, FADE_FULLSCREEN, FADE_IN
#include "fade.h" // for Fade, fadeType::FULLSCREEN, fadeMode::IN
#include "global_inputs.h" // for globalInputs::check
#include "input.h" // for Input
#include "jail_audio.h" // for JA_GetMusicState, JA_Music_state
@@ -57,9 +57,9 @@ Instructions::Instructions(JA_Music_t *music)
// Inicializa objetos
fade->setColor(fadeColor.r, fadeColor.g, fadeColor.b);
fade->setType(FADE_FULLSCREEN);
fade->setType(fadeType::FULLSCREEN);
fade->setPost(param.fade.postDuration);
fade->setMode(FADE_IN);
fade->setMode(fadeMode::IN);
fade->activate();
// Rellena la textura de texto

View File

@@ -59,7 +59,7 @@ void Title::init()
ticks = 0;
ticksSpeed = 15;
fade->setColor(fadeColor.r, fadeColor.g, fadeColor.b);
fade->setType(FADE_RANDOM_SQUARE);
fade->setType(fadeType::RANDOM_SQUARE);
fade->setPost(param.fade.postDuration);
demo = true;
numControllers = input->getNumControllers();

View File

@@ -98,7 +98,7 @@ struct demoKeys_t
// Estructura para las opciones de la ventana
struct op_window_t
{
int size; // Contiene el valor por el que se multiplica el tamaño de la ventana
int size; // Contiene el valor por el que se multiplica el tamaño de la ventana
};
// Estructura con opciones para el video
@@ -135,7 +135,7 @@ struct op_audio_t
// Estructura para las opciones del juego
struct op_game_t
{
gameDifficulty difficulty; // Dificultad del juego
gameDifficulty difficulty; // Dificultad del juego
Uint8 language; // Idioma usado en el juego
bool autofire; // Indica si el jugador ha de pulsar repetidamente para disparar o basta con mantener pulsado
std::vector<hiScoreEntry_t> hiScoreTable; // Tabla con las mejores puntuaciones
@@ -197,12 +197,12 @@ struct paramGame_t
// param.fade
struct paramFade_t
{
int numSquaresWidth; // Cantidad total de cuadraditos en horizontal para el FADE_RANDOM_SQUARE
int numSquaresHeight; // Cantidad total de cuadraditos en vertical para el FADE_RANDOM_SQUARE
int numSquaresWidth; // Cantidad total de cuadraditos en horizontal para el fadeType::RANDOM_SQUARE
int numSquaresHeight; // Cantidad total de cuadraditos en vertical para el fadeType::RANDOM_SQUARE
int randomSquaresDelay; // Duración entre cada pintado de cuadrados
int randomSquaresMult; // Cantidad de cuadrados que se pintaran cada vez
int postDuration; // Duración final del fade
int venetianSize; // Altura de los rectangulos para FADE_VENETIAN
int venetianSize; // Altura de los rectangulos para fadeType::VENETIAN
};
// param.title