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 // Constructor
Fade::Fade(SDL_Renderer *renderer, param_t *param) 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 // Destructor
Fade::~Fade() Fade::~Fade()
{ {
SDL_DestroyTexture(mBackbuffer); SDL_DestroyTexture(backbuffer);
mBackbuffer = nullptr; backbuffer = nullptr;
} }
// Inicializa las variables // Inicializa las variables
void Fade::init(Uint8 r, Uint8 g, Uint8 b) void Fade::init()
{ {
mFadeType = FADE_CENTER; type = FADE_CENTER;
mEnabled = false; enabled = false;
mFinished = false; finished = false;
mCounter = 0; counter = 0;
mR = r; r = 0;
mG = g; g = 0;
mB = b; b = 0;
} }
// Pinta una transición en pantalla // Pinta una transición en pantalla
void Fade::render() void Fade::render()
{ {
if (mEnabled && !mFinished) if (enabled && !finished)
{ {
switch (mFadeType) switch (type)
{ {
case FADE_FULLSCREEN: case FADE_FULLSCREEN:
mRect1 = {0, 0, param->gameWidth, param->gameHeight};
for (int i = 0; i < 256; i += 4) for (int i = 0; i < 256; i += 4)
{ {
// Dibujamos sobre el renderizador // Dibujamos sobre el renderizador
SDL_SetRenderTarget(mRenderer, nullptr); SDL_SetRenderTarget(renderer, nullptr);
// Copia el backbuffer con la imagen que había al renderizador // 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_SetRenderDrawColor(renderer, r, g, b, i);
SDL_RenderFillRect(mRenderer, &mRect1); SDL_RenderFillRect(renderer, &rect1);
// Vuelca el renderizador en pantalla // Vuelca el renderizador en pantalla
SDL_RenderPresent(mRenderer); SDL_RenderPresent(renderer);
} }
// Deja todos los buffers del mismo color // Deja todos los buffers del mismo color
SDL_SetRenderTarget(mRenderer, mBackbuffer); SDL_SetRenderTarget(renderer, backbuffer);
SDL_SetRenderDrawColor(mRenderer, mR, mG, mB, 255); SDL_SetRenderDrawColor(renderer, r, g, b, 255);
SDL_RenderClear(mRenderer); SDL_RenderClear(renderer);
SDL_SetRenderTarget(mRenderer, nullptr); SDL_SetRenderTarget(renderer, nullptr);
SDL_SetRenderDrawColor(mRenderer, mR, mG, mB, 255); SDL_SetRenderDrawColor(renderer, r, g, b, 255);
SDL_RenderClear(mRenderer); SDL_RenderClear(renderer);
break; break;
case FADE_CENTER: case FADE_CENTER:
mRect1 = {0, 0, param->gameWidth, 0}; SDL_SetRenderDrawColor(renderer, r, g, b, 64);
mRect2 = {0, 0, param->gameWidth, 0};
SDL_SetRenderDrawColor(mRenderer, mR, mG, mB, 64); for (int i = 0; i < counter; i++)
for (int i = 0; i < mCounter; i++)
{ {
mRect1.h = mRect2.h = i * 4; rect1.h = rect2.h = i * 4;
mRect2.y = param->gameHeight - (i * 4); rect2.y = param->gameHeight - (i * 4);
SDL_RenderFillRect(mRenderer, &mRect1); SDL_RenderFillRect(renderer, &rect1);
SDL_RenderFillRect(mRenderer, &mRect2); SDL_RenderFillRect(renderer, &rect2);
} }
if ((mCounter * 4) > param->gameHeight) if ((counter * 4) > param->gameHeight)
mFinished = true; finished = true;
break; break;
case FADE_RANDOM_SQUARE: case FADE_RANDOM_SQUARE:
mRect1 = {0, 0, 32, 32};
for (Uint16 i = 0; i < 50; i++) for (Uint16 i = 0; i < 50; i++)
{ {
// Crea un color al azar // Crea un color al azar
mR = 255 * (rand() % 2); r = 255 * (rand() % 2);
mG = 255 * (rand() % 2); g = 255 * (rand() % 2);
mB = 255 * (rand() % 2); b = 255 * (rand() % 2);
SDL_SetRenderDrawColor(mRenderer, mR, mG, mB, 64); SDL_SetRenderDrawColor(renderer, r, g, b, 64);
// Dibujamos sobre el backbuffer // Dibujamos sobre el backbuffer
SDL_SetRenderTarget(mRenderer, mBackbuffer); SDL_SetRenderTarget(renderer, backbuffer);
mRect1.x = rand() % (param->gameWidth - mRect1.w); rect1.x = rand() % (param->gameWidth - rect1.w);
mRect1.y = rand() % (param->gameHeight - mRect1.h); rect1.y = rand() % (param->gameHeight - rect1.h);
SDL_RenderFillRect(mRenderer, &mRect1); SDL_RenderFillRect(renderer, &rect1);
// Volvemos a usar el renderizador de forma normal // Volvemos a usar el renderizador de forma normal
SDL_SetRenderTarget(mRenderer, nullptr); SDL_SetRenderTarget(renderer, nullptr);
// Copiamos el backbuffer al renderizador // Copiamos el backbuffer al renderizador
SDL_RenderCopy(mRenderer, mBackbuffer, nullptr, nullptr); SDL_RenderCopy(renderer, backbuffer, nullptr, nullptr);
// Volcamos el renderizador en pantalla // Volcamos el renderizador en pantalla
SDL_RenderPresent(mRenderer); SDL_RenderPresent(renderer);
SDL_Delay(100); SDL_Delay(100);
} }
break; 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_SetRenderDrawColor(renderer, r, g, b, 255);
SDL_RenderClear(mRenderer); SDL_RenderClear(renderer);
} }
} }
// Actualiza las variables internas // Actualiza las variables internas
void Fade::update() void Fade::update()
{ {
if (mEnabled) if (enabled)
mCounter++; {
counter++;
}
} }
// Activa el fade // Activa el fade
void Fade::activateFade() void Fade::activate()
{ {
mEnabled = true; enabled = true;
mFinished = false; finished = false;
mCounter = 0; 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 // Comprueba si está activo
bool Fade::isEnabled() bool Fade::isEnabled()
{ {
return mEnabled; return enabled;
} }
// Comprueba si ha terminado la transicion // Comprueba si ha terminado la transicion
bool Fade::hasEnded() bool Fade::hasEnded()
{ {
return mFinished; return finished;
} }
// Establece el tipo de fade // 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,19 +17,22 @@ class Fade
{ {
private: private:
// Objetos y punteros // Objetos y punteros
SDL_Renderer *mRenderer; // El renderizador de la ventana SDL_Renderer *renderer; // El renderizador de la ventana
SDL_Texture *mBackbuffer; // Textura para usar como backbuffer SDL_Texture *backbuffer; // Textura para usar como backbuffer
// Variables // Variables
Uint8 mFadeType; // Tipo de fade a realizar Uint8 type; // Tipo de fade a realizar
Uint16 mCounter; // Contador interno Uint16 counter; // Contador interno
bool mEnabled; // Indica si el fade está activo bool enabled; // Indica si el fade está activo
bool mFinished; // Indica si ha terminado la transición bool finished; // Indica si ha terminado la transición
Uint8 mR, mG, mB; // Colores para el fade Uint8 r, g, b; // Colores para el fade
SDL_Rect mRect1; // Rectangulo usado para crear los efectos de transición SDL_Rect rect1; // Rectangulo usado para crear los efectos de transición
SDL_Rect mRect2; // 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 param_t *param; // Puntero con todos los parametros del programa
// Inicializa las variables
void init();
public: public:
// Constructor // Constructor
Fade(SDL_Renderer *renderer, param_t *param); Fade(SDL_Renderer *renderer, param_t *param);
@@ -37,9 +40,6 @@ public:
// Destructor // Destructor
~Fade(); ~Fade();
// Inicializa las variables
void init(Uint8 r, Uint8 g, Uint8 b);
// Pinta una transición en pantalla // Pinta una transición en pantalla
void render(); void render();
@@ -47,7 +47,7 @@ public:
void update(); void update();
// Activa el fade // Activa el fade
void activateFade(); void activate();
// Comprueba si ha terminado la transicion // Comprueba si ha terminado la transicion
bool hasEnded(); bool hasEnded();
@@ -56,7 +56,10 @@ public:
bool isEnabled(); bool isEnabled();
// Establece el tipo de fade // 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 #endif

View File

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

View File

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