Trabajando en el ending

This commit is contained in:
2022-11-03 22:32:30 +01:00
parent 0b1b9f2d15
commit 9b66c7e275
6 changed files with 97 additions and 5 deletions

View File

@@ -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
{