#pragma once #include // Para Uint32 #include // Para unique_ptr, shared_ptr #include "section.h" // Para Options class DefineButtons; // lines 5-5 class Fade; // lines 6-6 class GameLogo; // lines 7-7 class Sprite; // lines 8-8 class Text; // lines 9-9 class TiledBG; // lines 11-11 // Textos constexpr const char TEXT_COPYRIGHT[] = "@2020,2025 JailDesigner"; // Parámetros constexpr bool ALLOW_TITLE_ANIMATION_SKIP = false; /* 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 tres estados: - El titulo está animandose, con el fondo estático - El titulo ya está en su sitio y el fondo se está animando - Se ha pulsado el botón de start 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: // Enumeraciones enum class TitleState { LOGO_ANIMATING, LOGO_FINISHED, START_HAS_BEEN_PRESSED, }; // Objetos y punteros std::shared_ptr text_; // Objeto de texto para poder escribir textos en pantalla std::unique_ptr fade_; // Objeto para realizar fundidos en pantalla 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 mini_logo_sprite_; // Sprite con el logo de JailGames mini std::unique_ptr define_buttons_; // Objeto para definir los botones del joystic // Variable int counter_ = 0; // Temporizador para la pantalla de titulo Uint64 ticks_ = 0; // Contador de ticks para ajustar la velocidad del programa section::Name next_section_; // Indica cual es la siguiente sección a cargar cuando termine el contador del titulo section::Options selection_ = section::Options::TITLE_TIME_OUT; // Opción elegida en el titulo int num_controllers_; // Número de mandos conectados TitleState state_; // Estado en el que se encuentra la sección // Actualiza las variables del objeto void update(); // Dibuja el objeto en pantalla void render(); // Comprueba los eventos void checkEvents(); // Comprueba las entradas void checkInput(); // Reinicia el contador interno void resetCounter(); // Intercambia la asignación de mandos a los jugadores void swapControllers(); // Intercambia el teclado de jugador void swapKeyboard(); // Muestra información sobre los controles y los jugadores void showControllers(); // Actualiza el fade void updateFade(); // Actualiza el estado void updateState(); public: // Constructor Title(); // Destructor ~Title(); // Bucle para el titulo del juego void run(); };