#pragma once #include // for Uint32 #include // for unique_ptr, shared_ptr #include "define_buttons.h" // for DefineButtons #include "fade.h" // for Fade #include "game_logo.h" // for GameLogo #include "sprite.h" // for Sprite #include "text.h" // for Text #include "tiled_bg.h" // for Tiledbg class Input; // lines 17-17 class Screen; // lines 18-18 class Texture; // lines 20-20 namespace section { enum class Name; } struct JA_Music_t; // lines 21-21 // Textos constexpr const char TEXT_COPYRIGHT[] = "@2020,2024 JailDesigner"; // Parámetros constexpr bool ALLOW_TITLE_ANIMATION_SKIP = true; /* Esta clase gestiona un estado del programa. Se encarga de la parte del titulo o menu que sirve para empezar a jugar. Utiliza otras clases para: - Mostrar el logo del juego - Dibujar el tileado de fondo - Redifinir los botones de los mandos de juego Esta clase tiene dos estados: - El titulo está animandose, con el fondo estático - El titulo ya está en su sitio y el fondo se está animando Por razones de diseño, no se permite saltarse la animación del titulo, aunque es configurable mediante un define */ // Clase Title class Title { private: // Objetos y punteros Screen *screen_; // Objeto encargado de dibujar en pantalla Input *input_; // Objeto para leer las entradas de teclado o mando std::unique_ptr tiled_bg_; // Objeto para dibujar el mosaico animado de fondo std::unique_ptr game_logo_; // Objeto para dibujar el logo con el título del juego std::unique_ptr define_buttons_; // Objeto para definir los botones del joystic std::shared_ptr mini_logo_texture_; // Textura con el logo de JailGames mini std::unique_ptr mini_logo_sprite_; // Sprite con el logo de JailGames mini std::unique_ptr text1_; // Objeto de texto para poder escribir textos en pantalla std::unique_ptr text2_; // Objeto de texto para poder escribir textos en pantalla std::unique_ptr fade_; // Objeto para realizar fundidos en pantalla JA_Music_t *music_; // Musica para el titulo // Variable int counter_; // Temporizador para la pantalla de titulo Uint32 ticks_; // Contador de ticks para ajustar la velocidad del programa Uint32 ticks_speed_; // Velocidad a la que se repiten los bucles del programa bool demo_; // Indica si el modo demo estará activo section::Name next_section_; // Indica cual es la siguiente sección a cargar cuando termine el contador del titulo int post_fade_; // Opción a realizar cuando termina el fundido int num_controllers_; // Número de mandos conectados // Inicializa los valores de las variables void init(); // Actualiza las variables del objeto void update(); // Dibuja el objeto en pantalla void render(); // Comprueba los eventos void checkEvents(); // Comprueba las entradas void checkInput(); // Recarga las texturas void reLoadTextures(); // Reinicia el contador interno void resetCounter(); // Intercambia la asignación de mandos a los jugadores void swapControllers(); public: // Constructor explicit Title(JA_Music_t *music); // Destructor ~Title() = default; // Bucle para el titulo del juego void run(); };