#pragma once #include // for SDL_Rect #include // for SDL_Texture #include // for Uint32 #include // for shared_ptr #include // for string #include // for vector #include "paleta.h" // for jSurface class SSprite; // lines 13-13 class Surface; // lines 15-15 class Title { private: struct TitleLetter { std::string letter; // Letra a escribir int x; // Posición en el eje x bool enabled; // Solo se escriben y mueven si estan habilitadas }; enum class TitleState { SHOW_LOADING_SCREEN, FADE_LOADING_SCREEN, SHOW_MENU }; // Objetos y punteros std::shared_ptr title_logo_surface_; // Textura con los graficos std::shared_ptr title_logo_sprite_; // SSprite para manejar la surface std::shared_ptr bg_surface_; // Textura para dibujar el fondo de la pantalla std::shared_ptr cheevos_surface_; // Textura con la lista de logros std::shared_ptr cheevos_sprite_; // SSprite para manejar la surface con la lista de logros // Variables int counter_ = 0; // Contador std::string long_text_; // Texto que aparece en la parte inferior del titulo Uint32 ticks_ = 0; // Contador de ticks para ajustar la velocidad del programa std::vector letters_; // Vector con las letras de la marquesina int marquee_speed_ = 3; // Velocidad de desplazamiento de la marquesina bool show_cheevos_ = false; // Indica si se muestra por pantalla el listado de logros SDL_Rect cheevos_surface_view_; // Zona visible de la surface con el listado de logros TitleState state_; // Estado en el que se encuentra el bucle principal jSurface loading_screen_; // Surface con los gráficos de la pantalla de carga // Actualiza las variables void update(); // Dibuja en pantalla void render(); // Comprueba el manejador de eventos void checkEvents(); // Comprueba las entradas void checkInput(); // Inicializa la marquesina void initMarquee(); // Actualiza la marquesina void updateMarquee(); // Dibuja la marquesina void renderMarquee(); // Desplaza la lista de logros void moveCheevosList(int direction); // Rellena la surface de fondo con todos los gráficos void fillSurface(); // Crea y rellena la surface para mostrar los logros void createCheevosTexture(); // Oculta la lista de logros void hideCheevosList(); public: // Constructor Title(); // Destructor ~Title(); // Bucle principal void run(); };