diff --git a/source/fade.cpp b/source/fade.cpp index 65ffdaa..55325e5 100644 --- a/source/fade.cpp +++ b/source/fade.cpp @@ -1,17 +1,14 @@ #include "fade.h" -#include // for SDL_BLENDMODE_BLEND, SDL_BLENDMODE_NONE -#include // for SDL_PIXELFORMAT_RGBA8888 -#include // for rand -#include // for min, max -#include "param.h" // for param -#include "utils.h" // for param_t, paramGame_t, paramFade_t +#include // for SDL_BLENDMODE_BLEND, SDL_BLENDMODE_NONE +#include // for SDL_PIXELFORMAT_RGBA8888 +#include // for rand +#include // 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 diff --git a/source/fade.h b/source/fade.h index ade0a02..d717fb5 100644 --- a/source/fade.h +++ b/source/fade.h @@ -1,19 +1,25 @@ #pragma once -#include // for SDL_Rect -#include // for SDL_Renderer, SDL_Texture -#include // for Uint8, Uint16 -#include // for vector +#include // for SDL_Rect +#include // for SDL_Renderer, SDL_Texture +#include // for Uint8, Uint16 +#include // 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 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 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); diff --git a/source/game.cpp b/source/game.cpp index 93a7b37..da56a19 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -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(); } diff --git a/source/hiscore_table.cpp b/source/hiscore_table.cpp index 01537d5..9ff3b9e 100644 --- a/source/hiscore_table.cpp +++ b/source/hiscore_table.cpp @@ -7,7 +7,6 @@ #include // 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(); + fade = std::make_unique(renderer); + background = std::make_unique(renderer); + text = std::make_unique(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; } diff --git a/source/hiscore_table.h b/source/hiscore_table.h index 0f28eb9..ecd8993 100644 --- a/source/hiscore_table.h +++ b/source/hiscore_table.h @@ -1,17 +1,20 @@ #pragma once -#include // for SDL_Event -#include // for SDL_Rect -#include // for SDL_Renderer, SDL_Texture -#include // for Uint16, Uint32 -#include // for string -#include "section.h" // for options_e +#include // for SDL_Event +#include // for SDL_Rect +#include // for SDL_Renderer, SDL_Texture +#include // for Uint16, Uint32 +#include +#include // 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,14 +34,15 @@ 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; // Objeto para renderizar fades + std::unique_ptr background; // Objeto para dibujar el fondo del juego + std::unique_ptr eventHandler; // Manejador de eventos + std::unique_ptr text; // Objeto para escribir texto // Variables Uint16 counter; // Contador @@ -46,7 +50,7 @@ private: 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(); diff --git a/source/instructions.cpp b/source/instructions.cpp index 63305ba..06d26de 100644 --- a/source/instructions.cpp +++ b/source/instructions.cpp @@ -6,7 +6,7 @@ #include // for max #include // 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 diff --git a/source/title.cpp b/source/title.cpp index 08e7e39..08a002c 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -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(); @@ -151,7 +151,7 @@ void Title::render() if (section::options == section::OPTIONS_TITLE_2) { constexpr color_t shadow = {0x14, 0x87, 0xc4}; - + // 'PRESS TO PLAY' if (counter % 50 > 14 && !defineButtons->isEnabled()) { @@ -267,7 +267,7 @@ void Title::checkInput() // Comprueba el botón de START de los mandos if (input->checkInput(input_start, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i)) - { + { // Si no está el botón de servicio activo if (!input->checkInput(input_service, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i)) { diff --git a/source/utils.h b/source/utils.h index 238992e..f36e1f3 100644 --- a/source/utils.h +++ b/source/utils.h @@ -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 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