From d38659d7838b4c2d7de43f0afae878fe73b51be8 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Tue, 18 Jun 2024 14:03:03 +0200 Subject: [PATCH] Commit de no se lo que estava fent pero me'n vaig a casa --- source/fade.cpp | 155 ++++++++++++++++++++++++++++------------------- source/fade.h | 33 +++++----- source/game.cpp | 23 ++++--- source/title.cpp | 5 +- 4 files changed, 125 insertions(+), 91 deletions(-) diff --git a/source/fade.cpp b/source/fade.cpp index a83696b..f0bffe2 100644 --- a/source/fade.cpp +++ b/source/fade.cpp @@ -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; } \ No newline at end of file diff --git a/source/fade.h b/source/fade.h index d8a8c33..5e54783 100644 --- a/source/fade.h +++ b/source/fade.h @@ -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 \ No newline at end of file diff --git a/source/game.cpp b/source/game.cpp index cb742b3..b35a418 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -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); } } diff --git a/source/title.cpp b/source/title.cpp index 22b3770..1b2f6c0 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -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; } }