#pragma once #include // Para Uint32 #include // Para unique_ptr, shared_ptr #include "section.h" // Para Options class DefineButtons; class Fade; class GameLogo; class Sprite; class Text; class TiledBG; // Textos constexpr const char TEXT_COPYRIGHT[] = "@2020,2025 JailDesigner"; // Parámetros constexpr bool ALLOW_TITLE_ANIMATION_SKIP = false; /* Clase que gestiona el estado de título/menú principal del juego. Responsable de mostrar el logo, el fondo animado y gestionar la entrada para comenzar la partida. No permite saltar la animación del título salvo que se cambie el define. */ // Clase Title class Title { public: // --- Constructores y destructor --- Title(); ~Title(); // --- Método principal --- void run(); // Bucle para el título del juego private: // --- Enumeraciones --- enum class TitleState { LOGO_ANIMATING, // El logo está animándose LOGO_FINISHED, // El logo ha terminado de animarse START_HAS_BEEN_PRESSED, // Se ha pulsado el botón de start }; // --- Objetos y punteros --- std::shared_ptr text_; // Objeto de texto para escribir en pantalla std::unique_ptr fade_; // Fundido en pantalla std::unique_ptr tiled_bg_; // Fondo animado de tiles std::unique_ptr game_logo_; // Logo del juego std::unique_ptr mini_logo_sprite_; // Logo JailGames mini std::unique_ptr define_buttons_; // Definición de botones del joystick // --- Variables de estado --- int counter_ = 0; // Temporizador para la pantalla de título Uint64 ticks_ = 0; // Contador de ticks para ajustar la velocidad Section::Name next_section_; // Siguiente sección a cargar Section::Options selection_ = Section::Options::TITLE_TIME_OUT; // Opción elegida en el título int num_controllers_; // Número de mandos conectados TitleState state_; // Estado actual de la sección // --- Métodos internos --- void update(); // Actualiza las variables del objeto void render(); // Dibuja el objeto en pantalla void checkEvents(); // Comprueba los eventos void checkInput(); // Comprueba las entradas void resetCounter(); // Reinicia el contador interno void swapControllers(); // Intercambia la asignación de mandos a los jugadores void swapKeyboard(); // Intercambia el teclado de jugador void showControllers(); // Muestra información sobre los controles y los jugadores void updateFade(); // Actualiza el fade void updateState(); // Actualiza el estado };