Treballant en la intro

This commit is contained in:
2025-03-13 20:55:24 +01:00
parent 5a6b96f7ab
commit d1db4f253e
2 changed files with 62 additions and 37 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

@@ -268,7 +268,8 @@ void Intro::run()
// Inicializa las imagens // Inicializa las imagens
void Intro::initSprites() void Intro::initSprites()
{ {
const std::array<std::string, 6> BITMAP_LIST = { // Listado de imagenes a usar
const std::array<std::string, 6> TEXTURE_LIST = {
"intro1.png", "intro1.png",
"intro2.png", "intro2.png",
"intro3.png", "intro3.png",
@@ -276,62 +277,86 @@ void Intro::initSprites()
"intro5.png", "intro5.png",
"intro6.png"}; "intro6.png"};
auto texture = Resource::get()->getTexture(BITMAP_LIST.front()); // Constantes
const int BITMAP_WIDTH = texture->getWidth(); auto texture = Resource::get()->getTexture(TEXTURE_LIST.front());
const int BITMAP_HEIGHT = texture->getHeight(); const int SPRITE_WIDTH = texture->getWidth();
const int X_DEST = param.game.game_area.center_x - BITMAP_WIDTH / 2; const int SPRITE_HEIGHT = texture->getHeight();
const int Y_DEST = param.game.game_area.first_quarter_y - (BITMAP_HEIGHT / 4); const int X_DEST = param.game.game_area.center_x - SPRITE_WIDTH / 2;
const int Y_DEST = param.game.game_area.first_quarter_y - (SPRITE_HEIGHT / 4);
// Inicializa los bitmaps de la intro // Inicializa los sprites de la intro
constexpr int TOTAL_BITMAPS = 6; constexpr int TOTAL_SPRITES = 6;
for (int i = 0; i < TOTAL_BITMAPS; ++i) for (int i = 0; i < TOTAL_SPRITES; ++i)
{ {
auto sprite = std::make_unique<PathSprite>(Resource::get()->getTexture(BITMAP_LIST.at(i))); auto sprite = std::make_unique<PathSprite>(Resource::get()->getTexture(TEXTURE_LIST.at(i)));
sprite->setWidth(BITMAP_WIDTH); sprite->setWidth(SPRITE_WIDTH);
sprite->setHeight(BITMAP_HEIGHT); sprite->setHeight(SPRITE_HEIGHT);
sprite->setSpriteClip(0, 0, BITMAP_WIDTH, BITMAP_HEIGHT); sprite->setSpriteClip(0, 0, SPRITE_WIDTH, SPRITE_HEIGHT);
sprites_.push_back(std::move(sprite)); sprites_.push_back(std::move(sprite));
} }
constexpr int BORDER = 4; sprites_.at(0)->addPath(-SPRITE_WIDTH, X_DEST, PathType::HORIZONTAL, Y_DEST, 100, easeInOutExpo, 0);
sprites_.at(0)->addPath(-BITMAP_WIDTH - BORDER, X_DEST, PathType::HORIZONTAL, Y_DEST, 100, easeInOutExpo, 0);
sprites_.at(1)->addPath(param.game.width, X_DEST, PathType::HORIZONTAL, Y_DEST, 100, easeOutBounce, 0); sprites_.at(1)->addPath(param.game.width, X_DEST, PathType::HORIZONTAL, Y_DEST, 100, easeOutBounce, 0);
sprites_.at(2)->addPath(-BITMAP_HEIGHT, Y_DEST, PathType::VERTICAL, X_DEST, 40, easeOutQuint, 0); sprites_.at(2)->addPath(-SPRITE_HEIGHT, Y_DEST, PathType::VERTICAL, X_DEST, 40, easeOutQuint, 0);
sprites_.at(3)->addPath(param.game.height, Y_DEST, PathType::VERTICAL, X_DEST, 800, easeOutQuint, 0); sprites_.at(3)->addPath(param.game.height, Y_DEST, PathType::VERTICAL, X_DEST, 800, easeOutQuint, 0);
sprites_.at(4)->addPath(-BITMAP_HEIGHT, Y_DEST, PathType::VERTICAL, X_DEST, 70, easeOutElastic, 0); sprites_.at(4)->addPath(-SPRITE_HEIGHT, Y_DEST, PathType::VERTICAL, X_DEST, 70, easeOutElastic, 0);
sprites_.at(5)->addPath(param.game.width, X_DEST, PathType::HORIZONTAL, Y_DEST, 400, easeOutQuint, 0); sprites_.at(5)->addPath(param.game.width, X_DEST, PathType::HORIZONTAL, Y_DEST, 400, easeOutQuint, 0);
// Crea la textura para la sombra // Constantes
const int S_BITMAP_WIDTH = BITMAP_WIDTH + BORDER; const int BORDER = 4;
const int S_BITMAP_HEIGHT = BITMAP_HEIGHT + BORDER; const int SHADOW_SPRITE_WIDTH = SPRITE_WIDTH + BORDER;
const int SHADOW_SPRITE_HEIGHT = SPRITE_HEIGHT + BORDER;
const int S_X_DEST = X_DEST - BORDER / 2; const int S_X_DEST = X_DEST - BORDER / 2;
const int S_Y_DEST = Y_DEST - BORDER / 2;; const int S_Y_DEST = Y_DEST - BORDER / 2;
;
// Crea las texturas para las sombras
std::vector<std::shared_ptr<Texture>> shadow_textures;
for (int i = 0; i < TOTAL_SPRITES; ++i)
{
auto shadow_texture = std::make_shared<Texture>(Screen::get()->getRenderer()); auto shadow_texture = std::make_shared<Texture>(Screen::get()->getRenderer());
shadow_texture->createBlank(S_BITMAP_WIDTH, S_BITMAP_HEIGHT, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET); shadow_texture->createBlank(SHADOW_SPRITE_WIDTH, SHADOW_SPRITE_HEIGHT, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET);
shadow_texture->setBlendMode(SDL_BLENDMODE_BLEND); shadow_texture->setBlendMode(SDL_BLENDMODE_BLEND);
auto temp = SDL_GetRenderTarget(Screen::get()->getRenderer()); auto temp = SDL_GetRenderTarget(Screen::get()->getRenderer());
shadow_texture->setAsRenderTarget(Screen::get()->getRenderer()); shadow_texture->setAsRenderTarget(Screen::get()->getRenderer());
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 0x54, 0x31, 0x49, 0xFF);
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 0xFF, 0x00, 0x00, 0xFF);
SDL_RenderClear(Screen::get()->getRenderer()); SDL_RenderClear(Screen::get()->getRenderer());
SDL_Rect rect = {BORDER / 2, BORDER / 2, SPRITE_WIDTH, SPRITE_HEIGHT};
auto texture = Resource::get()->getTexture(TEXTURE_LIST.at(i))->getSDLTexture();
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_MOD);
//SDL_SetTextureAlphaMod(texture, 128);
SDL_RenderCopy(Screen::get()->getRenderer(), texture, nullptr, &rect);
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_NONE);
// SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 0x54, 0x31, 0x49, 0xFF);
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 0xFF, 0xFF, 0xFF, 192);
//SDL_RenderFillRect(Screen::get()->getRenderer(), &rect);
SDL_SetRenderTarget(Screen::get()->getRenderer(), temp); SDL_SetRenderTarget(Screen::get()->getRenderer(), temp);
shadow_textures.push_back(shadow_texture);
}
// Inicializa los sprites para la sombra // Inicializa los sprites para la sombra
for (int i = 0; i < TOTAL_BITMAPS; ++i) for (int i = 0; i < TOTAL_SPRITES; ++i)
{ {
auto sprite = std::make_unique<PathSprite>(shadow_texture); auto sprite = std::make_unique<PathSprite>(shadow_textures.at(i));
sprite->setWidth(S_BITMAP_WIDTH); sprite->setWidth(SHADOW_SPRITE_WIDTH);
sprite->setHeight(S_BITMAP_HEIGHT); sprite->setHeight(SHADOW_SPRITE_HEIGHT);
sprite->setSpriteClip(0, 0, S_BITMAP_WIDTH, S_BITMAP_HEIGHT); sprite->setSpriteClip(0, 0, SHADOW_SPRITE_WIDTH, SHADOW_SPRITE_HEIGHT);
shadow_sprites_.push_back(std::move(sprite)); shadow_sprites_.push_back(std::move(sprite));
} }
shadow_sprites_.at(0)->addPath(param.game.height, S_Y_DEST, PathType::VERTICAL, S_X_DEST, 100, easeInOutExpo, 0); shadow_sprites_.at(0)->addPath(param.game.height, S_Y_DEST, PathType::VERTICAL, S_X_DEST, 100, easeInOutExpo, 0);
shadow_sprites_.at(1)->addPath(-S_BITMAP_HEIGHT, S_Y_DEST, PathType::VERTICAL, S_X_DEST, 100, easeOutBounce, 0); shadow_sprites_.at(1)->addPath(-SHADOW_SPRITE_HEIGHT, S_Y_DEST, PathType::VERTICAL, S_X_DEST, 100, easeOutBounce, 0);
shadow_sprites_.at(2)->addPath(-S_BITMAP_WIDTH, S_X_DEST, PathType::HORIZONTAL, S_Y_DEST, 40, easeOutQuint, 0); shadow_sprites_.at(2)->addPath(-SHADOW_SPRITE_WIDTH, S_X_DEST, PathType::HORIZONTAL, S_Y_DEST, 40, easeOutQuint, 0);
shadow_sprites_.at(3)->addPath(param.game.width, S_X_DEST, PathType::HORIZONTAL, S_Y_DEST, 800, easeOutQuint, 0); shadow_sprites_.at(3)->addPath(param.game.width, S_X_DEST, PathType::HORIZONTAL, S_Y_DEST, 800, easeOutQuint, 0);
shadow_sprites_.at(4)->addPath(param.game.height, S_Y_DEST, PathType::VERTICAL, S_X_DEST, 70, easeOutElastic, 0); shadow_sprites_.at(4)->addPath(param.game.height, S_Y_DEST, PathType::VERTICAL, S_X_DEST, 70, easeOutElastic, 0);
shadow_sprites_.at(5)->addPath(-S_BITMAP_HEIGHT, S_Y_DEST, PathType::VERTICAL, S_X_DEST, 400, easeOutQuint, 0); shadow_sprites_.at(5)->addPath(-SHADOW_SPRITE_HEIGHT, S_Y_DEST, PathType::VERTICAL, S_X_DEST, 400, easeOutQuint, 0);
} }
// Inicializa los textos // Inicializa los textos