Commitet pa valgrind, he aprofitat i posat mes make_unique i enum class
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user