Commit de no se lo que estava fent pero me'n vaig a casa

This commit is contained in:
2024-06-18 14:03:03 +02:00
parent 022e44cfeb
commit d38659d783
4 changed files with 125 additions and 91 deletions

View File

@@ -5,110 +5,110 @@
// Constructor
Fade::Fade(SDL_Renderer *renderer, param_t *param)
{
mRenderer = renderer;
// Copia punteros y objetos
this->renderer = renderer;
this->param = param;
mBackbuffer = SDL_CreateTexture(mRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param->gameWidth, param->gameHeight);
// Crea la textura donde dibujar el fade
backbuffer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param->gameWidth, param->gameHeight);
SDL_SetTextureBlendMode(backbuffer, SDL_BLENDMODE_BLEND);
// Inicializa las variables
init();
}
// Destructor
Fade::~Fade()
{
SDL_DestroyTexture(mBackbuffer);
mBackbuffer = nullptr;
SDL_DestroyTexture(backbuffer);
backbuffer = nullptr;
}
// Inicializa las variables
void Fade::init(Uint8 r, Uint8 g, Uint8 b)
void Fade::init()
{
mFadeType = FADE_CENTER;
mEnabled = false;
mFinished = false;
mCounter = 0;
mR = r;
mG = g;
mB = b;
type = FADE_CENTER;
enabled = false;
finished = false;
counter = 0;
r = 0;
g = 0;
b = 0;
}
// Pinta una transición en pantalla
void Fade::render()
{
if (mEnabled && !mFinished)
if (enabled && !finished)
{
switch (mFadeType)
switch (type)
{
case FADE_FULLSCREEN:
mRect1 = {0, 0, param->gameWidth, param->gameHeight};
for (int i = 0; i < 256; i += 4)
{
// Dibujamos sobre el renderizador
SDL_SetRenderTarget(mRenderer, nullptr);
SDL_SetRenderTarget(renderer, nullptr);
// Copia el backbuffer con la imagen que había al renderizador
SDL_RenderCopy(mRenderer, mBackbuffer, nullptr, nullptr);
SDL_RenderCopy(renderer, backbuffer, nullptr, nullptr);
SDL_SetRenderDrawColor(mRenderer, mR, mG, mB, i);
SDL_RenderFillRect(mRenderer, &mRect1);
SDL_SetRenderDrawColor(renderer, r, g, b, i);
SDL_RenderFillRect(renderer, &rect1);
// Vuelca el renderizador en pantalla
SDL_RenderPresent(mRenderer);
SDL_RenderPresent(renderer);
}
// Deja todos los buffers del mismo color
SDL_SetRenderTarget(mRenderer, mBackbuffer);
SDL_SetRenderDrawColor(mRenderer, mR, mG, mB, 255);
SDL_RenderClear(mRenderer);
SDL_SetRenderTarget(renderer, backbuffer);
SDL_SetRenderDrawColor(renderer, r, g, b, 255);
SDL_RenderClear(renderer);
SDL_SetRenderTarget(mRenderer, nullptr);
SDL_SetRenderDrawColor(mRenderer, mR, mG, mB, 255);
SDL_RenderClear(mRenderer);
SDL_SetRenderTarget(renderer, nullptr);
SDL_SetRenderDrawColor(renderer, r, g, b, 255);
SDL_RenderClear(renderer);
break;
case FADE_CENTER:
mRect1 = {0, 0, param->gameWidth, 0};
mRect2 = {0, 0, param->gameWidth, 0};
SDL_SetRenderDrawColor(renderer, r, g, b, 64);
SDL_SetRenderDrawColor(mRenderer, mR, mG, mB, 64);
for (int i = 0; i < mCounter; i++)
for (int i = 0; i < counter; i++)
{
mRect1.h = mRect2.h = i * 4;
mRect2.y = param->gameHeight - (i * 4);
rect1.h = rect2.h = i * 4;
rect2.y = param->gameHeight - (i * 4);
SDL_RenderFillRect(mRenderer, &mRect1);
SDL_RenderFillRect(mRenderer, &mRect2);
SDL_RenderFillRect(renderer, &rect1);
SDL_RenderFillRect(renderer, &rect2);
}
if ((mCounter * 4) > param->gameHeight)
mFinished = true;
if ((counter * 4) > param->gameHeight)
finished = true;
break;
case FADE_RANDOM_SQUARE:
mRect1 = {0, 0, 32, 32};
for (Uint16 i = 0; i < 50; i++)
{
// Crea un color al azar
mR = 255 * (rand() % 2);
mG = 255 * (rand() % 2);
mB = 255 * (rand() % 2);
SDL_SetRenderDrawColor(mRenderer, mR, mG, mB, 64);
r = 255 * (rand() % 2);
g = 255 * (rand() % 2);
b = 255 * (rand() % 2);
SDL_SetRenderDrawColor(renderer, r, g, b, 64);
// Dibujamos sobre el backbuffer
SDL_SetRenderTarget(mRenderer, mBackbuffer);
SDL_SetRenderTarget(renderer, backbuffer);
mRect1.x = rand() % (param->gameWidth - mRect1.w);
mRect1.y = rand() % (param->gameHeight - mRect1.h);
SDL_RenderFillRect(mRenderer, &mRect1);
rect1.x = rand() % (param->gameWidth - rect1.w);
rect1.y = rand() % (param->gameHeight - rect1.h);
SDL_RenderFillRect(renderer, &rect1);
// Volvemos a usar el renderizador de forma normal
SDL_SetRenderTarget(mRenderer, nullptr);
SDL_SetRenderTarget(renderer, nullptr);
// Copiamos el backbuffer al renderizador
SDL_RenderCopy(mRenderer, mBackbuffer, nullptr, nullptr);
SDL_RenderCopy(renderer, backbuffer, nullptr, nullptr);
// Volcamos el renderizador en pantalla
SDL_RenderPresent(mRenderer);
SDL_RenderPresent(renderer);
SDL_Delay(100);
}
break;
@@ -118,42 +118,69 @@ void Fade::render()
}
}
if (mFinished)
// Pone el color en toda la textura
if (finished)
{
SDL_SetRenderDrawColor(mRenderer, mR, mG, mB, 255);
SDL_RenderClear(mRenderer);
SDL_SetRenderDrawColor(renderer, r, g, b, 255);
SDL_RenderClear(renderer);
}
}
// Actualiza las variables internas
void Fade::update()
{
if (mEnabled)
mCounter++;
if (enabled)
{
counter++;
}
}
// Activa el fade
void Fade::activateFade()
void Fade::activate()
{
mEnabled = true;
mFinished = false;
mCounter = 0;
enabled = true;
finished = false;
counter = 0;
switch (type)
{
case FADE_FULLSCREEN:
rect1 = {0, 0, param->gameWidth, param->gameHeight};
break;
case FADE_CENTER:
rect1 = {0, 0, param->gameWidth, 0};
rect2 = {0, 0, param->gameWidth, 0};
break;
case FADE_RANDOM_SQUARE:
rect1 = {0, 0, 32, 32};
break;
}
}
// Comprueba si está activo
bool Fade::isEnabled()
{
return mEnabled;
return enabled;
}
// Comprueba si ha terminado la transicion
bool Fade::hasEnded()
{
return mFinished;
return finished;
}
// Establece el tipo de fade
void Fade::setFadeType(Uint8 fadeType)
void Fade::setType(Uint8 type)
{
mFadeType = fadeType;
this->type = type;
}
// Establece el color del fade
void Fade::setColor(Uint8 r, Uint8 g, Uint8 b)
{
this->r = r;
this->g = g;
this->b = b;
}

View File

@@ -17,18 +17,21 @@ class Fade
{
private:
// Objetos y punteros
SDL_Renderer *mRenderer; // El renderizador de la ventana
SDL_Texture *mBackbuffer; // Textura para usar como backbuffer
SDL_Renderer *renderer; // El renderizador de la ventana
SDL_Texture *backbuffer; // Textura para usar como backbuffer
// Variables
Uint8 mFadeType; // Tipo de fade a realizar
Uint16 mCounter; // Contador interno
bool mEnabled; // Indica si el fade está activo
bool mFinished; // Indica si ha terminado la transición
Uint8 mR, mG, mB; // Colores para el fade
SDL_Rect mRect1; // Rectangulo usado para crear los efectos de transición
SDL_Rect mRect2; // Rectangulo usado para crear los efectos de transición
param_t *param; // Puntero con todos los parametros del programa
Uint8 type; // Tipo 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; // 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
param_t *param; // Puntero con todos los parametros del programa
// Inicializa las variables
void init();
public:
// Constructor
@@ -37,9 +40,6 @@ public:
// Destructor
~Fade();
// Inicializa las variables
void init(Uint8 r, Uint8 g, Uint8 b);
// Pinta una transición en pantalla
void render();
@@ -47,7 +47,7 @@ public:
void update();
// Activa el fade
void activateFade();
void activate();
// Comprueba si ha terminado la transicion
bool hasEnded();
@@ -56,7 +56,10 @@ public:
bool isEnabled();
// Establece el tipo de fade
void setFadeType(Uint8 fadeType);
void setType(Uint8 type);
// Establece el color del fade
void setColor(Uint8 r, Uint8 g, Uint8 b);
};
#endif

View File

@@ -299,7 +299,7 @@ void Game::init()
demo.counter = 0;
// Inicializa el objeto para el fundido
fade->init(0x27, 0x27, 0x36);
fade->setColor(0x27, 0x27, 0x36);
// Con los globos creados, calcula el nivel de amenaza
evaluateAndSetMenace();
@@ -1671,18 +1671,21 @@ void Game::updateDeath()
// Renderiza el fade final cuando se acaba la partida
void Game::renderDeathFade(int counter)
{ // Counter debe ir de 0 a 150
{
// Counter debe ir de 0 a 150
SDL_SetRenderDrawColor(renderer, 0x27, 0x27, 0x36, 255);
const int desp = 16;
const int max = param->gameHeight / desp;
if (counter < 150)
{
// 192 / 6 = 32, 6 cuadrados de 32 pixeles
SDL_Rect rect[12];
SDL_Rect rect[max];
Uint8 h = counter / 3;
for (int i = 0; i < 12; ++i)
for (int i = 0; i < max; ++i)
{
rect[i].x = 0;
rect[i].y = i * 16;
rect[i].y = i * desp;
rect[i].w = param->gameWidth;
if (i == 0)
{
@@ -3120,8 +3123,8 @@ void Game::updatePausedGame()
break;
case 2:
fade->setFadeType(FADE_CENTER);
fade->activateFade();
fade->setType(FADE_CENTER);
fade->activate();
break;
default:
@@ -3251,12 +3254,12 @@ void Game::updateGameOverScreen()
{
case 0: // YES
postFade = 0;
fade->activateFade();
fade->activate();
break;
case 1: // NO
postFade = 1;
fade->activateFade();
fade->activate();
break;
default:
@@ -3279,7 +3282,7 @@ void Game::updateGameOverScreen()
if (gameCompleted)
{
postFade = 1;
fade->activateFade();
fade->activate();
JA_PlaySound(itemPickUpSound);
}
}

View File

@@ -73,7 +73,8 @@ void Title::init()
postFade = 0;
ticks = 0;
ticksSpeed = 15;
fade->init(0x17, 0x17, 0x26);
fade->setColor(0x17, 0x17, 0x26);
fade->setType(FADE_FULLSCREEN);
demo = true;
// Pone valores por defecto a las opciones de control
@@ -315,7 +316,7 @@ void Title::checkInput()
else if (input->checkInput(input_accept, REPEAT_FALSE))
{
fade->activateFade();
fade->activate();
postFade = 0;
}
}