Treballan en la Intro

This commit is contained in:
2025-03-12 13:39:48 +01:00
parent 5ccd7eebcd
commit 215ce999c2
3 changed files with 154 additions and 104 deletions

View File

@@ -51,83 +51,110 @@ void Intro::updateScenes()
{ {
switch (scene_) switch (scene_)
{ {
case 1: case 0:
{ {
// Primera imagen - UPV // 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 // 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 // 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_.at(0)->setEnabled(false);
texts_[1]->setEnabled(true); texts_.at(1)->setEnabled(true);
} }
// Tercer texto de la primera imagen // 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_.at(1)->setEnabled(false);
texts_[2]->setEnabled(true); texts_.at(2)->setEnabled(true);
} }
// Fin de la primera escena // Fin de la primera escena
if (texts_[2]->hasFinished()) if (texts_.at(2)->hasFinished())
{ {
bitmaps_[0]->setEnabled(false); bitmaps_.at(0)->setEnabled(false);
texts_[2]->setEnabled(false); texts_.at(2)->setEnabled(false);
scene_++; scene_++;
} }
break; break;
} }
case 2: case 1:
{ {
// Segunda imagen - Máquina // 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 // 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 // Fin de la segunda escena
if (texts_[3]->hasFinished()) if (texts_.at(3)->hasFinished())
{ {
bitmaps_[1]->setEnabled(false); bitmaps_.at(1)->setEnabled(false);
texts_[3]->setEnabled(false); texts_.at(3)->setEnabled(false);
scene_++; scene_++;
} }
break; break;
} }
case 3: case 2:
{ {
// Tercera imagen junto con primer texto - GRITO // 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); bitmaps_.at(2)->setEnabled(true);
texts_[4]->setEnabled(true); texts_.at(4)->setEnabled(true);
} }
// Fin de la tercera escena // 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); bitmaps_.at(2)->setEnabled(false);
texts_[4]->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_++; scene_++;
} }
@@ -136,25 +163,23 @@ void Intro::updateScenes()
case 4: case 4:
{ {
// Cuarta imagen junto con primer texto - Reflexión // Quinta imagen - Patada
if (!bitmaps_[3]->hasFinished() && !texts_[5]->hasFinished()) if (!bitmaps_.at(4)->hasFinished())
{ {
bitmaps_[3]->setEnabled(true); bitmaps_.at(4)->setEnabled(true);
texts_[5]->setEnabled(true);
} }
// Segundo texto de la cuarta imagen // Primer texto de la quinta imagen
if (texts_[5]->hasFinished() && !texts_[6]->hasFinished()) if (bitmaps_.at(4)->hasFinished() && !texts_.at(7)->hasFinished())
{ {
texts_[5]->setEnabled(false); texts_.at(7)->setEnabled(true);
texts_[6]->setEnabled(true);
} }
// Fin de la cuarta escena // Fin de la quinta escena
if (bitmaps_[3]->hasFinished() && texts_[6]->hasFinished()) if (bitmaps_.at(4)->hasFinished() && texts_.at(7)->hasFinished())
{ {
bitmaps_[3]->setEnabled(false); bitmaps_.at(4)->setEnabled(false);
texts_[6]->setEnabled(false); texts_.at(7)->setEnabled(false);
scene_++; scene_++;
} }
@@ -162,44 +187,19 @@ void Intro::updateScenes()
} }
case 5: 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é // 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); bitmaps_.at(5)->setEnabled(true);
texts_[8]->setEnabled(true); texts_.at(8)->setEnabled(true);
} }
// Acaba el último texto // Acaba el último texto
if (bitmaps_[5]->hasFinished() && texts_[8]->hasFinished()) if (bitmaps_.at(5)->hasFinished() && texts_.at(8)->hasFinished())
{ {
bitmaps_[5]->setEnabled(false); bitmaps_.at(5)->setEnabled(false);
texts_[8]->setEnabled(false); texts_.at(8)->setEnabled(false);
JA_StopMusic(); JA_StopMusic();
section::name = section::Name::TITLE; section::name = section::Name::TITLE;
section::options = section::Options::TITLE_1; section::options = section::Options::TITLE_1;
@@ -224,16 +224,11 @@ void Intro::update()
// Actualiza el objeto screen // Actualiza el objeto screen
Screen::get()->update(); Screen::get()->update();
// Actualiza los objetos // Actualiza los sprites
for (auto &bitmap : bitmaps_) updateSprites();
{
bitmap->update();
}
for (auto &text : texts_) // Actualiza los textos
{ updateTexts();
text->update();
}
// Actualiza las escenas de la intro // Actualiza las escenas de la intro
updateScenes(); updateScenes();
@@ -252,16 +247,11 @@ void Intro::render()
// Limpia la pantalla // Limpia la pantalla
Screen::get()->clean(bg_color); Screen::get()->clean(bg_color);
// Dibuja los objetos // Dibuja los sprites
for (const auto &bitmap : bitmaps_) renderSprites();
{
bitmap->render();
}
for (const auto &text : texts_) // Dibuja los textos
{ renderTexts();
text->render();
}
// Vuelca el contenido del renderizador en pantalla // Vuelca el contenido del renderizador en pantalla
Screen::get()->render(); Screen::get()->render();
@@ -351,6 +341,19 @@ void Intro::initSprites()
bitmaps_.at(5)->setVelY(0.0f); bitmaps_.at(5)->setVelY(0.0f);
bitmaps_.at(5)->setAccelX(0.0f); bitmaps_.at(5)->setAccelX(0.0f);
bitmaps_.at(5)->setAccelY(0.0f); bitmaps_.at(5)->setAccelY(0.0f);
// Crea la textura para la sombra
auto shadow_texture = std::make_shared<Texture>(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<Sprite>(shadow_texture, bitmaps_.front()->getRect());
} }
// Inicializa los textos // Inicializa los textos
@@ -409,3 +412,40 @@ void Intro::initTexts()
text->center(param.game.game_area.center_x); 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<int>(bitmaps_.at(scene_)->getPosX()) + 2;
const int Y = static_cast<int>(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();
}
}

View File

@@ -1,6 +1,7 @@
#pragma once #pragma once
#include <SDL2/SDL_stdinc.h> // Para Uint32 #include <SDL2/SDL_stdinc.h> // Para Uint32
#include <SDL2/SDL.h> // Para SDL_Texture
#include <memory> // Para unique_ptr, shared_ptr #include <memory> // Para unique_ptr, shared_ptr
#include <vector> // Para vector #include <vector> // Para vector
#include "smart_sprite.h" // Para SmartSprite #include "smart_sprite.h" // Para SmartSprite
@@ -20,10 +21,11 @@ private:
// Objetos // Objetos
std::vector<std::unique_ptr<SmartSprite>> bitmaps_; // Vector con los sprites inteligentes para los dibujos de la intro std::vector<std::unique_ptr<SmartSprite>> bitmaps_; // Vector con los sprites inteligentes para los dibujos de la intro
std::vector<std::unique_ptr<Writer>> texts_; // Textos de la intro std::vector<std::unique_ptr<Writer>> texts_; // Textos de la intro
std::unique_ptr<Sprite> shadow_sprite_; // Sprite para la sombra de las imagenes
// Variables // Variables
Uint32 ticks_ = 0; // Contador de ticks para ajustar la velocidad del programa 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 // Actualiza las variables del objeto
void update(); void update();
@@ -46,6 +48,18 @@ private:
// Inicializa los textos // Inicializa los textos
void initTexts(); void initTexts();
// Actualiza los sprites
void updateSprites();
// Actualiza los textos
void updateTexts();
// Dibuja los sprites
void renderSprites();
// Dibuja los textos
void renderTexts();
public: public:
// Constructor // Constructor
Intro(); Intro();

View File

@@ -15,13 +15,9 @@ std::vector<SDL_Point> createPath(int start, int end, PathType type, int fixed_p
double t = static_cast<double>(i) / (steps - 1); double t = static_cast<double>(i) / (steps - 1);
double value = start + (end - start) * easingFunction(t); 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); value = start + (end > 0 ? 1 : -1) * std::abs(end - start) * easingFunction(t);
}
else if (start < 0 && end > 0)
{
value = start + std::abs(end - start) * easingFunction(t);
} }
switch (type) switch (type)
@@ -105,8 +101,8 @@ void PathSprite::enable()
// Establece la posición // Establece la posición
auto &path = paths_.at(current_path_); auto &path = paths_.at(current_path_);
const auto &p = path.spots.at(path.counter); const auto &P = path.spots.at(path.counter);
setPosition(p); setPosition(P);
} }
// Coloca el sprite en los diferentes puntos del recorrido // Coloca el sprite en los diferentes puntos del recorrido