From 9b66c7e2752165472d5fd82a7890c19ecc91c12c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Thu, 3 Nov 2022 22:32:30 +0100 Subject: [PATCH] Trabajando en el ending --- data/ending/ending4.png | Bin 1568 -> 1640 bytes source/common/sprite.cpp | 9 ++++- source/common/texture.cpp | 6 +++ source/common/texture.h | 3 ++ source/ending.cpp | 82 ++++++++++++++++++++++++++++++++++++-- source/ending.h | 2 + 6 files changed, 97 insertions(+), 5 deletions(-) diff --git a/data/ending/ending4.png b/data/ending/ending4.png index dad2d38dfa5ab023ed21e3324312a7ba638d691d..c7cb6f7b20aef1c5dcf1f5f3adc9ec78b8fe2bb2 100644 GIT binary patch delta 1611 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 diff --git a/source/common/sprite.cpp b/source/common/sprite.cpp index e5a1104..1a49a41 100644 --- a/source/common/sprite.cpp +++ b/source/common/sprite.cpp @@ -138,7 +138,14 @@ void Sprite::setSpriteClip(SDL_Rect rect) // Establece el valor de la variable void Sprite::setSpriteClip(int x, int y, int w, int h) { - spriteClip = {x, y, w, h}; + if (w == -1 || h == -1) + { + spriteClip = {x, y, this->w, this->h}; + } + else + { + spriteClip = {x, y, w, h}; + } } // Obten el valor de la variable diff --git a/source/common/texture.cpp b/source/common/texture.cpp index 0c96e92..79e0b92 100644 --- a/source/common/texture.cpp +++ b/source/common/texture.cpp @@ -198,4 +198,10 @@ int Texture::getHeight() bool Texture::reLoad() { return loadFromFile(path, renderer); +} + +// Obtiene la textura +SDL_Texture *Texture::getSDLTexture() +{ + return texture; } \ No newline at end of file diff --git a/source/common/texture.h b/source/common/texture.h index 487e2a8..d83d7e2 100644 --- a/source/common/texture.h +++ b/source/common/texture.h @@ -58,6 +58,9 @@ public: // Recarga la textura bool reLoad(); + + // Obtiene la textura + SDL_Texture *getSDLTexture(); }; #endif diff --git a/source/ending.cpp b/source/ending.cpp index 234c612..26279e9 100644 --- a/source/ending.cpp +++ b/source/ending.cpp @@ -69,6 +69,14 @@ Ending::~Ending() delete sprite; SDL_DestroyTexture(canvasTexture); SDL_DestroyTexture(coverTexture); + + for (auto st : spriteTexts) + { + delete st.coverTexture; + delete st.sprite; + delete st.texture; + } + spriteTexts.clear(); } // Actualiza el objeto @@ -100,13 +108,26 @@ void Ending::render() screen->start(); // Limpia la pantalla - screen->clean(); + screen->clean(stringToColor(options->palette, "green")); // Dibuja la canvasTexture - SDL_RenderCopy(renderer, canvasTexture, nullptr, nullptr); + // SDL_RenderCopy(renderer, canvasTexture, nullptr, nullptr); // Dibuja la coverTexture - renderCoverTexture(); + // renderCoverTexture(); + + if (scene == 0) + { + spriteTexts.at(0).sprite->render(); + spriteTexts.at(1).sprite->render(); + spriteTexts.at(2).sprite->render(); + spriteTexts.at(3).sprite->render(); + + spriteTexts.at(0).coverSprite->render(); + spriteTexts.at(1).coverSprite->render(); + spriteTexts.at(2).coverSprite->render(); + spriteTexts.at(3).coverSprite->render(); + } // Vuelca el contenido del renderizador en pantalla screen->blit(); @@ -239,14 +260,54 @@ void Ending::iniTexts() endingTexture_t st; const int width = text->lenght(t.caption, 1) + 2 + 2; const int height = text->getCharacterSize() + 2 + 2; - const color_t c = stringToColor(options->palette, "black"); + color_t c = stringToColor(options->palette, "black"); + + // Crea la texture st.texture = new Texture(renderer); st.texture->createBlank(renderer, width, height, SDL_TEXTUREACCESS_TARGET); st.texture->setAsRenderTarget(renderer); st.texture->setBlendMode(SDL_BLENDMODE_BLEND); text->writeDX(TXT_STROKE, 2, 2, t.caption, 1, c, 2, c); + + // Crea el sprite st.sprite = new Sprite({0, 0, st.texture->getWidth(), st.texture->getHeight()}, st.texture, renderer); st.sprite->setPos({(GAMECANVAS_WIDTH - st.texture->getWidth()) / 2, t.pos}); + + // Crea la coverTexture + st.coverTexture = new Texture(renderer); + st.coverTexture->createBlank(renderer, width, height + 8, SDL_TEXTUREACCESS_TARGET); + st.coverTexture->setAsRenderTarget(renderer); + st.coverTexture->setBlendMode(SDL_BLENDMODE_BLEND); + + // Rellena la coverTexture con color transparente + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); + SDL_RenderClear(renderer); + + // Los primeros 8 pixels crea una malla + c = stringToColor(options->palette, "red"); + SDL_SetRenderDrawColor(renderer, c.r, c.g, c.b, 0xFF); + for (int i = 0; i < width; i += 2) + { + SDL_RenderDrawPoint(renderer, i, 0); + SDL_RenderDrawPoint(renderer, i, 2); + SDL_RenderDrawPoint(renderer, i, 4); + SDL_RenderDrawPoint(renderer, i, 6); + + SDL_RenderDrawPoint(renderer, i + 1, 5); + SDL_RenderDrawPoint(renderer, i + 1, 7); + } + + // El resto se rellena de color sólido + SDL_Rect rect = {0, 8, width, height}; + c = stringToColor(options->palette, "cyan"); + SDL_SetRenderDrawColor(renderer, c.r, c.g, c.b, 0xFF); + SDL_RenderFillRect(renderer, &rect); + + // Crea el sprite + st.coverSprite = new Sprite({0, 0, st.coverTexture->getWidth(), st.coverTexture->getHeight() - 8}, st.coverTexture, renderer); + st.coverSprite->setPos({(GAMECANVAS_WIDTH - st.coverTexture->getWidth()) / 2, t.pos}); + st.coverSprite->setSpriteClip(0, 8, -1, -1); + spriteTexts.push_back(st); } } @@ -439,6 +500,19 @@ void Ending::updateCounter() if (counterEnabled) { counter++; + + { + /*for (auto st : spriteTexts) + { + const int height = st.sprite->getHeight() + 8; + const int width = st.sprite->getWidth(); + const int offset = std::min(counter / 8, height / 2); + SDL_Rect srcRect = {0, 0, width, height - (offset * 2)}; + SDL_Rect dstRect = {0, (offset * 2) - 8, width, height - (offset * 2)}; + st.texture->setAsRenderTarget(renderer); + SDL_RenderCopy(renderer, st.coverTexture->getSDLTexture(), &srcRect, &dstRect); + }*/ + } } else { diff --git a/source/ending.h b/source/ending.h index 6067bf0..10b8df3 100644 --- a/source/ending.h +++ b/source/ending.h @@ -24,6 +24,8 @@ private: { Texture *texture; Sprite *sprite; + Texture *coverTexture; + Sprite *coverSprite; }; struct textAndPos_t