From 215ce999c203c54f1ddbcab65e3c3ad53123c62a Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Wed, 12 Mar 2025 13:39:48 +0100 Subject: [PATCH] Treballan en la Intro --- source/intro.cpp | 230 ++++++++++++++++++++++++----------------- source/intro.h | 16 ++- source/path_sprite.cpp | 12 +-- 3 files changed, 154 insertions(+), 104 deletions(-) diff --git a/source/intro.cpp b/source/intro.cpp index 9a33fc2..ecfcdef 100644 --- a/source/intro.cpp +++ b/source/intro.cpp @@ -51,83 +51,110 @@ void Intro::updateScenes() { switch (scene_) { - case 1: - { + case 0: + { // Primera imagen - UPV - if (!bitmaps_[0]->hasFinished()) + if (!bitmaps_.at(0)->hasFinished()) { - bitmaps_[0]->setEnabled(true); + bitmaps_.at(0)->setEnabled(true); } // Primer texto de la primera imagen - if (bitmaps_[0]->hasFinished() && !texts_[0]->hasFinished()) + if (bitmaps_.at(0)->hasFinished() && !texts_.at(0)->hasFinished()) { - texts_[0]->setEnabled(true); + texts_.at(0)->setEnabled(true); } // Segundo texto de la primera imagen - if (texts_[0]->hasFinished() && !texts_[1]->hasFinished()) + if (texts_.at(0)->hasFinished() && !texts_.at(1)->hasFinished()) { - texts_[0]->setEnabled(false); - texts_[1]->setEnabled(true); + texts_.at(0)->setEnabled(false); + texts_.at(1)->setEnabled(true); } // Tercer texto de la primera imagen - if (texts_[1]->hasFinished() && !texts_[2]->hasFinished()) + if (texts_.at(1)->hasFinished() && !texts_.at(2)->hasFinished()) { - texts_[1]->setEnabled(false); - texts_[2]->setEnabled(true); + texts_.at(1)->setEnabled(false); + texts_.at(2)->setEnabled(true); } // Fin de la primera escena - if (texts_[2]->hasFinished()) + if (texts_.at(2)->hasFinished()) { - bitmaps_[0]->setEnabled(false); - texts_[2]->setEnabled(false); + bitmaps_.at(0)->setEnabled(false); + texts_.at(2)->setEnabled(false); scene_++; } break; } - case 2: - { + case 1: + { // Segunda imagen - Máquina - if (!bitmaps_[1]->hasFinished()) + if (!bitmaps_.at(1)->hasFinished()) { - bitmaps_[1]->setEnabled(true); + bitmaps_.at(1)->setEnabled(true); } // Primer texto de la segunda imagen - if (bitmaps_[1]->hasFinished() && !texts_[3]->hasFinished()) + if (bitmaps_.at(1)->hasFinished() && !texts_.at(3)->hasFinished()) { - texts_[3]->setEnabled(true); + texts_.at(3)->setEnabled(true); } // Fin de la segunda escena - if (texts_[3]->hasFinished()) + if (texts_.at(3)->hasFinished()) { - bitmaps_[1]->setEnabled(false); - texts_[3]->setEnabled(false); + bitmaps_.at(1)->setEnabled(false); + texts_.at(3)->setEnabled(false); scene_++; } break; } - case 3: - { + case 2: + { // Tercera imagen junto con primer texto - GRITO - if (!bitmaps_[2]->hasFinished() && !texts_[4]->hasFinished()) + if (!bitmaps_.at(2)->hasFinished() && !texts_.at(4)->hasFinished()) { - bitmaps_[2]->setEnabled(true); - texts_[4]->setEnabled(true); + bitmaps_.at(2)->setEnabled(true); + texts_.at(4)->setEnabled(true); } // Fin de la tercera escena - if (bitmaps_[2]->hasFinished() && texts_[4]->hasFinished()) + if (bitmaps_.at(2)->hasFinished() && texts_.at(4)->hasFinished()) { - bitmaps_[2]->setEnabled(false); - texts_[4]->setEnabled(false); + bitmaps_.at(2)->setEnabled(false); + texts_.at(4)->setEnabled(false); + scene_++; + } + + break; + } + + case 3: + { + // Cuarta imagen junto con primer texto - Reflexión + if (!bitmaps_.at(3)->hasFinished() && !texts_.at(5)->hasFinished()) + { + bitmaps_.at(3)->setEnabled(true); + texts_.at(5)->setEnabled(true); + } + + // Segundo texto de la cuarta imagen + if (texts_.at(5)->hasFinished() && !texts_.at(6)->hasFinished()) + { + texts_.at(5)->setEnabled(false); + texts_.at(6)->setEnabled(true); + } + + // Fin de la cuarta escena + if (bitmaps_.at(3)->hasFinished() && texts_.at(6)->hasFinished()) + { + bitmaps_.at(3)->setEnabled(false); + texts_.at(6)->setEnabled(false); scene_++; } @@ -135,26 +162,24 @@ void Intro::updateScenes() } case 4: - { - // Cuarta imagen junto con primer texto - Reflexión - if (!bitmaps_[3]->hasFinished() && !texts_[5]->hasFinished()) + { + // Quinta imagen - Patada + if (!bitmaps_.at(4)->hasFinished()) { - bitmaps_[3]->setEnabled(true); - texts_[5]->setEnabled(true); + bitmaps_.at(4)->setEnabled(true); } - // Segundo texto de la cuarta imagen - if (texts_[5]->hasFinished() && !texts_[6]->hasFinished()) + // Primer texto de la quinta imagen + if (bitmaps_.at(4)->hasFinished() && !texts_.at(7)->hasFinished()) { - texts_[5]->setEnabled(false); - texts_[6]->setEnabled(true); + texts_.at(7)->setEnabled(true); } - // Fin de la cuarta escena - if (bitmaps_[3]->hasFinished() && texts_[6]->hasFinished()) + // Fin de la quinta escena + if (bitmaps_.at(4)->hasFinished() && texts_.at(7)->hasFinished()) { - bitmaps_[3]->setEnabled(false); - texts_[6]->setEnabled(false); + bitmaps_.at(4)->setEnabled(false); + texts_.at(7)->setEnabled(false); scene_++; } @@ -162,44 +187,19 @@ void Intro::updateScenes() } case 5: - { - // Quinta imagen - Patada - if (!bitmaps_[4]->hasFinished()) - { - bitmaps_[4]->setEnabled(true); - } - - // Primer texto de la quinta imagen - if (bitmaps_[4]->hasFinished() && !texts_[7]->hasFinished()) - { - texts_[7]->setEnabled(true); - } - - // Fin de la quinta escena - if (bitmaps_[4]->hasFinished() && texts_[7]->hasFinished()) - { - bitmaps_[4]->setEnabled(false); - texts_[7]->setEnabled(false); - scene_++; - } - - break; - } - - case 6: - { + { // Sexta imagen junto con texto - Globos de café - if (!bitmaps_[5]->hasFinished() && !texts_[8]->hasFinished()) + if (!bitmaps_.at(5)->hasFinished() && !texts_.at(8)->hasFinished()) { - bitmaps_[5]->setEnabled(true); - texts_[8]->setEnabled(true); + bitmaps_.at(5)->setEnabled(true); + texts_.at(8)->setEnabled(true); } // Acaba el último texto - if (bitmaps_[5]->hasFinished() && texts_[8]->hasFinished()) + if (bitmaps_.at(5)->hasFinished() && texts_.at(8)->hasFinished()) { - bitmaps_[5]->setEnabled(false); - texts_[8]->setEnabled(false); + bitmaps_.at(5)->setEnabled(false); + texts_.at(8)->setEnabled(false); JA_StopMusic(); section::name = section::Name::TITLE; section::options = section::Options::TITLE_1; @@ -224,16 +224,11 @@ void Intro::update() // Actualiza el objeto screen Screen::get()->update(); - // Actualiza los objetos - for (auto &bitmap : bitmaps_) - { - bitmap->update(); - } + // Actualiza los sprites + updateSprites(); - for (auto &text : texts_) - { - text->update(); - } + // Actualiza los textos + updateTexts(); // Actualiza las escenas de la intro updateScenes(); @@ -252,16 +247,11 @@ void Intro::render() // Limpia la pantalla Screen::get()->clean(bg_color); - // Dibuja los objetos - for (const auto &bitmap : bitmaps_) - { - bitmap->render(); - } + // Dibuja los sprites + renderSprites(); - for (const auto &text : texts_) - { - text->render(); - } + // Dibuja los textos + renderTexts(); // Vuelca el contenido del renderizador en pantalla Screen::get()->render(); @@ -351,6 +341,19 @@ void Intro::initSprites() bitmaps_.at(5)->setVelY(0.0f); bitmaps_.at(5)->setAccelX(0.0f); bitmaps_.at(5)->setAccelY(0.0f); + + // Crea la textura para la sombra + auto shadow_texture = std::make_shared(Screen::get()->getRenderer()); + shadow_texture->createBlank(BITMAP_WIDTH, 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); + + // Inicializa el sprite para la sombra + shadow_sprite_ = std::make_unique(shadow_texture, bitmaps_.front()->getRect()); } // Inicializa los textos @@ -408,4 +411,41 @@ void Intro::initTexts() { text->center(param.game.game_area.center_x); } +} + +// Actualiza los sprites +void Intro::updateSprites() +{ + for (auto &bitmap : bitmaps_) + { + bitmap->update(); + } + const int X = static_cast(bitmaps_.at(scene_)->getPosX()) + 2; + const int Y = static_cast(bitmaps_.at(scene_)->getPosY()) + 2; + shadow_sprite_->setPosition(X, Y); +} + +// Actualiza los textos +void Intro::updateTexts() +{ + for (auto &text : texts_) + { + text->update(); + } +} + +// Dibuja los sprites +void Intro::renderSprites() +{ + shadow_sprite_->render(); + bitmaps_.at(scene_)->render(); +} + +// Dibuja los textos +void Intro::renderTexts() +{ + for (const auto &text : texts_) + { + text->render(); + } } \ No newline at end of file diff --git a/source/intro.h b/source/intro.h index ce9cd68..5d084d4 100644 --- a/source/intro.h +++ b/source/intro.h @@ -1,6 +1,7 @@ #pragma once #include // Para Uint32 +#include // Para SDL_Texture #include // Para unique_ptr, shared_ptr #include // Para vector #include "smart_sprite.h" // Para SmartSprite @@ -20,10 +21,11 @@ private: // Objetos std::vector> bitmaps_; // Vector con los sprites inteligentes para los dibujos de la intro std::vector> texts_; // Textos de la intro + std::unique_ptr shadow_sprite_; // Sprite para la sombra de las imagenes // Variables Uint32 ticks_ = 0; // Contador de ticks para ajustar la velocidad del programa - int scene_ = 1; // Indica que escena está activa + int scene_ = 0; // Indica que escena está activa // Actualiza las variables del objeto void update(); @@ -46,6 +48,18 @@ private: // Inicializa los textos void initTexts(); + // Actualiza los sprites + void updateSprites(); + + // Actualiza los textos + void updateTexts(); + + // Dibuja los sprites + void renderSprites(); + + // Dibuja los textos + void renderTexts(); + public: // Constructor Intro(); diff --git a/source/path_sprite.cpp b/source/path_sprite.cpp index d63bea1..f3093ca 100644 --- a/source/path_sprite.cpp +++ b/source/path_sprite.cpp @@ -15,13 +15,9 @@ std::vector createPath(int start, int end, PathType type, int fixed_p double t = static_cast(i) / (steps - 1); double value = start + (end - start) * easingFunction(t); - if (start > 0 && end < 0) + if ((start > 0 && end < 0) || (start < 0 && end > 0)) { - value = start - std::abs(end - start) * easingFunction(t); - } - else if (start < 0 && end > 0) - { - value = start + std::abs(end - start) * easingFunction(t); + value = start + (end > 0 ? 1 : -1) * std::abs(end - start) * easingFunction(t); } switch (type) @@ -105,8 +101,8 @@ void PathSprite::enable() // Establece la posición auto &path = paths_.at(current_path_); - const auto &p = path.spots.at(path.counter); - setPosition(p); + const auto &P = path.spots.at(path.counter); + setPosition(P); } // Coloca el sprite en los diferentes puntos del recorrido