#pragma once #include // for SDL_Rect #include // for SDL_Renderer, SDL_Texture #include // for Uint32 #include // for shared_ptr #include // for string #include // for vector #include "paleta.h" // for jSurface class Input; // lines 13-13 class Resource; // lines 14-14 class Screen; // lines 15-15 class Sprite; // lines 16-16 class Text; // lines 17-17 class Texture; // lines 18-18 class Title { private: struct letter_t { 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 states_e { show_loading_screen, fade_loading_screen, show_menu }; // Objetos y punteros Screen *screen_; // Objeto encargado de dibujar en pantalla SDL_Renderer *renderer_; // El renderizador de la ventana Resource *resource_; // Objeto con los recursos Input *input_; // Objeto pata gestionar la entrada std::shared_ptr texture_; // Textura con los graficos std::shared_ptr sprite_; // Sprite para manejar la textura SDL_Texture *bg_texture_; // Textura para dibujar el fondo de la pantalla std::shared_ptr text_; // Objeto para escribir texto en pantalla std::shared_ptr info_text_; // Objeto para escribir texto en pantalla std::shared_ptr cheevos_texture_; // Textura con la lista de logros std::shared_ptr cheevos_sprite_; // Sprite para manejar la textura 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_texture_view_; // Zona visible de la textura con el listado de logros states_e 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(); // Dibuja la linea de información inferior void renderInfo(); // Recarga las texturas void reLoadTextures(); // Cambia la paleta void switchPalette(); // Desplaza la lista de logros void moveCheevosList(int direction); // Rellena la textura de fondo con todos los gráficos void fillTexture(); // Crea y rellena la textura para mostrar los logros void createCheevosTexture(); // Oculta la lista de logros void hideCheevosList(); public: // Constructor Title(); // Destructor ~Title(); // Bucle principal void run(); };