From 4e9135c1af7881b513ba50add88c37217c28abe1 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sun, 30 Jun 2024 22:31:48 +0200 Subject: [PATCH] FADE_RANDOM_SQUARE no limpiaba la textura previamente centrada la tabla de la clase hiscore_table --- source/common/screen.cpp | 8 ++++++-- source/fade.cpp | 12 ++++++++++-- source/hiscore_table.cpp | 17 ++++++++++------- source/instructions.cpp | 4 ++-- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/source/common/screen.cpp b/source/common/screen.cpp index 4fd4cd7..02a6871 100644 --- a/source/common/screen.cpp +++ b/source/common/screen.cpp @@ -346,15 +346,19 @@ void Screen::renderFX() void Screen::update() { updateShake(); - // updateFlash(); } // Agita la pantalla void Screen::shake() { + // Si ya hay un shake effect en marcha no se pilla el origen, solo se renuevan los contadores + if (shakeEffect.remaining == 0) + { + shakeEffect.origin = dest.x; + } + shakeEffect.remaining = shakeEffect.lenght; shakeEffect.counter = shakeEffect.delay; - shakeEffect.origin = dest.x; } // Actualiza la logica para agitar la pantalla diff --git a/source/fade.cpp b/source/fade.cpp index 1f628cc..7f99372 100644 --- a/source/fade.cpp +++ b/source/fade.cpp @@ -87,7 +87,7 @@ void Fade::render() { SDL_RenderFillRect(renderer, &rect); } - + break; } @@ -178,7 +178,7 @@ void Fade::update() } } } - else + else { finished = true; } @@ -258,6 +258,14 @@ void Fade::activate() square[num - 1] = temp; num--; } + + // Limpia la textura + SDL_Texture *temp = SDL_GetRenderTarget(renderer); + SDL_SetRenderTarget(renderer, backbuffer); + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); + SDL_RenderClear(renderer); + SDL_SetRenderTarget(renderer, temp); + break; } diff --git a/source/hiscore_table.cpp b/source/hiscore_table.cpp index c656056..1f9129d 100644 --- a/source/hiscore_table.cpp +++ b/source/hiscore_table.cpp @@ -38,7 +38,7 @@ HiScoreTable::HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, ticksSpeed = 15; manualQuit = false; counter = 0; - counterEnd = 600; + counterEnd = 800; viewArea = {0, 0, param->gameWidth, param->gameHeight}; // Crea el contenido de la textura con la lista de puntuaciones @@ -85,10 +85,13 @@ void HiScoreTable::update() // Crea el contenido de la textura con la lista de puntuaciones void HiScoreTable::fillTexture() { - const color_t orangeColor = {0xFF, 0x7A, 0x00}; // hay 27 letras - 7 de puntos quedan 20 caracteres 20 - nameLenght 0 numDots + const color_t orangeColor = {0xFF, 0x7A, 0x00}; + const int maxNames = 10; const int spaceBetweenHeader = 32; - const int spaceBetweenLines = text->getCharacterSize() * 1.8f; + const int spaceBetweenLines = text->getCharacterSize() * 2.0f; + const int size = spaceBetweenHeader + spaceBetweenLines * maxNames; + const int firstLine = (param->gameHeight - size) / 2; // Pinta en el backbuffer el texto y los sprites SDL_Texture *temp = SDL_GetRenderTarget(renderer); @@ -97,13 +100,13 @@ void HiScoreTable::fillTexture() SDL_RenderClear(renderer); // Escribe el texto: Mejores puntuaciones - text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, GAMECANVAS_CENTER_X, 8, lang->getText(42), 1, orangeColor, 1, shdwTxtColor); + text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, GAMECANVAS_CENTER_X, firstLine, lang->getText(42), 1, orangeColor, 1, shdwTxtColor); // Rellena la lista con nombres std::vector names; names.insert(names.end(), {"Bry", "Usufondo", "G.Lucas", "P.Delgat", "P.Arrabalera", "Pelechano", "Sahuquillo", "Bacteriol", "Pepe", "Rosita"}); - for (int i = 0; i < 10; ++i) + for (int i = 0; i < maxNames; ++i) { const int nameLenght = names[i].length(); const int numDots = 20 - nameLenght; @@ -113,7 +116,7 @@ void HiScoreTable::fillTexture() dots = dots + "."; } const std::string line = names[i] + dots + "0000000"; - text->writeDX(TXT_CENTER | TXT_SHADOW, GAMECANVAS_CENTER_X, (i * spaceBetweenLines) + spaceBetweenHeader, line, 1, orangeColor, 1, shdwTxtColor); + text->writeDX(TXT_CENTER | TXT_SHADOW, GAMECANVAS_CENTER_X, (i * spaceBetweenLines) + firstLine + spaceBetweenHeader, line, 1, orangeColor, 1, shdwTxtColor); } // Cambia el destino de renderizado @@ -133,7 +136,7 @@ void HiScoreTable::render() background->render(); // Establece la ventana del backbuffer - viewArea.y = std::max(8, param->gameHeight - counter + 100); + viewArea.y = std::max(0, param->gameHeight - counter + 100); // Copia el backbuffer al renderizador SDL_RenderCopy(renderer, backbuffer, nullptr, &viewArea); diff --git a/source/instructions.cpp b/source/instructions.cpp index 1e2e6ef..43d2a7e 100644 --- a/source/instructions.cpp +++ b/source/instructions.cpp @@ -106,7 +106,7 @@ void Instructions::render() // Pinta en el backbuffer el texto y los sprites SDL_SetRenderTarget(renderer, backbuffer); - SDL_SetRenderDrawColor(renderer, bgColor.r, bgColor.g, bgColor.b, 255); + SDL_SetRenderDrawColor(renderer, 255, bgColor.g, bgColor.b, 255); SDL_RenderClear(renderer); // Escribe el texto @@ -168,7 +168,7 @@ void Instructions::render() screen->clean(bgColor); // Establece la ventana del backbuffer - window.y = std::max(8, param->gameHeight - counter + 100); + window.y = std::max(0, param->gameHeight - counter + 100); // Copia el backbuffer al renderizador SDL_RenderCopy(renderer, backbuffer, nullptr, &window);