diff --git a/data/gfx/intro/intro1.png b/data/gfx/intro/intro1.png index 356b996..5f441ce 100644 Binary files a/data/gfx/intro/intro1.png and b/data/gfx/intro/intro1.png differ diff --git a/source/intro.cpp b/source/intro.cpp index 0b72a3a..a83a325 100644 --- a/source/intro.cpp +++ b/source/intro.cpp @@ -268,7 +268,8 @@ void Intro::run() // Inicializa las imagens void Intro::initSprites() { - const std::array BITMAP_LIST = { + // Listado de imagenes a usar + const std::array TEXTURE_LIST = { "intro1.png", "intro2.png", "intro3.png", @@ -276,62 +277,86 @@ void Intro::initSprites() "intro5.png", "intro6.png"}; - auto texture = Resource::get()->getTexture(BITMAP_LIST.front()); - const int BITMAP_WIDTH = texture->getWidth(); - const int BITMAP_HEIGHT = texture->getHeight(); - const int X_DEST = param.game.game_area.center_x - BITMAP_WIDTH / 2; - const int Y_DEST = param.game.game_area.first_quarter_y - (BITMAP_HEIGHT / 4); + // Constantes + auto texture = Resource::get()->getTexture(TEXTURE_LIST.front()); + const int SPRITE_WIDTH = texture->getWidth(); + const int SPRITE_HEIGHT = texture->getHeight(); + 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 - constexpr int TOTAL_BITMAPS = 6; - for (int i = 0; i < TOTAL_BITMAPS; ++i) + // Inicializa los sprites de la intro + constexpr int TOTAL_SPRITES = 6; + for (int i = 0; i < TOTAL_SPRITES; ++i) { - auto sprite = std::make_unique(Resource::get()->getTexture(BITMAP_LIST.at(i))); - sprite->setWidth(BITMAP_WIDTH); - sprite->setHeight(BITMAP_HEIGHT); - sprite->setSpriteClip(0, 0, BITMAP_WIDTH, BITMAP_HEIGHT); + auto sprite = std::make_unique(Resource::get()->getTexture(TEXTURE_LIST.at(i))); + sprite->setWidth(SPRITE_WIDTH); + sprite->setHeight(SPRITE_HEIGHT); + sprite->setSpriteClip(0, 0, SPRITE_WIDTH, SPRITE_HEIGHT); sprites_.push_back(std::move(sprite)); } - constexpr int BORDER = 4; - sprites_.at(0)->addPath(-BITMAP_WIDTH - BORDER, X_DEST, PathType::HORIZONTAL, Y_DEST, 100, easeInOutExpo, 0); + sprites_.at(0)->addPath(-SPRITE_WIDTH, 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(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(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); - // Crea la textura para la sombra - const int S_BITMAP_WIDTH = BITMAP_WIDTH + BORDER; - const int S_BITMAP_HEIGHT = BITMAP_HEIGHT + BORDER; + // Constantes + const int BORDER = 4; + 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_Y_DEST = Y_DEST - BORDER / 2;; + const int S_Y_DEST = Y_DEST - BORDER / 2; + ; - auto shadow_texture = std::make_shared(Screen::get()->getRenderer()); - shadow_texture->createBlank(S_BITMAP_WIDTH, S_BITMAP_HEIGHT, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET); - shadow_texture->setBlendMode(SDL_BLENDMODE_BLEND); - auto temp = SDL_GetRenderTarget(Screen::get()->getRenderer()); - shadow_texture->setAsRenderTarget(Screen::get()->getRenderer()); - SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 0x54, 0x31, 0x49, 0xFF); - SDL_RenderClear(Screen::get()->getRenderer()); - SDL_SetRenderTarget(Screen::get()->getRenderer(), temp); + // Crea las texturas para las sombras + std::vector> shadow_textures; + + for (int i = 0; i < TOTAL_SPRITES; ++i) + { + auto shadow_texture = std::make_shared(Screen::get()->getRenderer()); + shadow_texture->createBlank(SHADOW_SPRITE_WIDTH, SHADOW_SPRITE_HEIGHT, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET); + shadow_texture->setBlendMode(SDL_BLENDMODE_BLEND); + + auto temp = SDL_GetRenderTarget(Screen::get()->getRenderer()); + shadow_texture->setAsRenderTarget(Screen::get()->getRenderer()); + + SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 0xFF, 0x00, 0x00, 0xFF); + 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); + + shadow_textures.push_back(shadow_texture); + } // 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(shadow_texture); - sprite->setWidth(S_BITMAP_WIDTH); - sprite->setHeight(S_BITMAP_HEIGHT); - sprite->setSpriteClip(0, 0, S_BITMAP_WIDTH, S_BITMAP_HEIGHT); + auto sprite = std::make_unique(shadow_textures.at(i)); + sprite->setWidth(SHADOW_SPRITE_WIDTH); + sprite->setHeight(SHADOW_SPRITE_HEIGHT); + sprite->setSpriteClip(0, 0, SHADOW_SPRITE_WIDTH, SHADOW_SPRITE_HEIGHT); 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(1)->addPath(-S_BITMAP_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(1)->addPath(-SHADOW_SPRITE_HEIGHT, S_Y_DEST, PathType::VERTICAL, S_X_DEST, 100, easeOutBounce, 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(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