#pragma once #include // Para Uint32, Uint64 #include // Para unique_ptr #include // Para vector #include "color.h" // Para Color #include "param.h" // Para Param, ParamIntro, param #include "path_sprite.h" // Para PathSprite #include "tiled_bg.h" // Para TiledBG #include "writer.h" // Para Writer // --- Clase Intro: muestra la secuencia de introducción --- // Esta clase gestiona un estado del programa. Se encarga de mostrar la secuencia // de introducción. class Intro { public: // --- Constructor y destructor --- Intro(); ~Intro() = default; // --- Bucle principal --- void run(); private: // --- Estados internos --- enum class State { SCENES, POST, }; enum class PostState { STOP_BG, END, }; // --- Objetos --- std::vector> card_sprites_; // Vector con los sprites inteligentes para los dibujos de la intro std::vector> shadow_sprites_; // Vector con los sprites inteligentes para las sombras std::vector> texts_; // Textos de la intro std::unique_ptr tiled_bg_; // Fondo en mosaico // --- Variables --- Uint64 ticks_ = 0; // Contador de ticks para ajustar la velocidad del programa int scene_ = 0; // Indica qué escena está activa State state_ = State::SCENES; // Estado principal de la intro PostState post_state_ = PostState::STOP_BG; // Estado POST Uint32 state_start_time_; // Tiempo de inicio del estado actual Color bg_color_ = param.intro.bg_color; // Color de fondo // --- Métodos internos --- void update(); // Actualiza las variables del objeto void render(); // Dibuja el objeto en pantalla static void checkInput(); // Comprueba las entradas static void checkEvents(); // Comprueba los eventos void updateScenes(); // Actualiza las escenas de la intro void initSprites(); // Inicializa las imágenes void initTexts(); // Inicializa los textos void updateSprites(); // Actualiza los sprites void updateTexts(); // Actualiza los textos void renderSprites(); // Dibuja los sprites void renderTexts(); // Dibuja los textos static void renderTextRect(); // Dibuja el rectangulo de fondo del texto; void updatePostState(); // Actualiza el estado POST // --- Métodos para manejar cada escena individualmente --- void updateScene0(); void updateScene1(); void updateScene2(); void updateScene3(); void updateScene4(); void updateScene5(); // --- Métodos auxiliares para reducir duplicación de código --- void enableCardAndShadow(int index); void switchText(int from_index, int to_index); };