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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

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

View File

@@ -199,3 +199,9 @@ bool Texture::reLoad()
{
return loadFromFile(path, renderer);
}
// Obtiene la textura
SDL_Texture *Texture::getSDLTexture()
{
return texture;
}

View File

@@ -58,6 +58,9 @@ public:
// Recarga la textura
bool reLoad();
// Obtiene la textura
SDL_Texture *getSDLTexture();
};
#endif

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
{

View File

@@ -24,6 +24,8 @@ private:
{
Texture *texture;
Sprite *sprite;
Texture *coverTexture;
Sprite *coverSprite;
};
struct textAndPos_t