#pragma once #include // for SDL_Renderer #include // for Uint32 #include // for shared_ptr #include // for string #include // for vector #include "utils.h" // for Color #include "defines.h" // for GAMECANVAS_FIRST_QUARTER_X, GAMECANVAS_THIRD_QUARTER_X, GAMECANVAS_WIDTH class AnimatedSprite; // lines 9-9 class Asset; // lines 10-10 class Input; // lines 11-11 class MovingSprite; // lines 12-12 class Resource; // lines 13-13 class Screen; // lines 14-14 class Text; // lines 15-15 struct JA_Music_t; // lines 16-16 class Ending2 { private: // Constantes static constexpr int FIRST_COL_ = GAMECANVAS_FIRST_QUARTER_X + (GAMECANVAS_WIDTH / 16); // Primera columna por donde desfilan los sprites static constexpr int SECOND_COL_ = GAMECANVAS_THIRD_QUARTER_X - (GAMECANVAS_WIDTH / 16); // Segunda columna por donde desfilan los sprites // 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 Asset *asset_; // Objeto con los ficheros de recursos Input *input_; // Objeto pata gestionar la entrada std::shared_ptr text_; // Objeto para escribir texto en pantalla std::vector> sprites_; // Vector con todos los sprites a dibujar std::vector> sprite_texts_; // Vector con los sprites de texto de los sprites std::vector> texts_; // Vector con los sprites de texto // Variables bool counter_enabled_; // Indica si está el contador habilitado int pre_counter_; // Contador previo int post_counter_; // Contador posterior bool post_counter_enabled_; // Indica si está habilitado el contador Uint32 ticks_; // Contador de ticks para ajustar la velocidad del programa JA_Music_t *music_; // Musica que suena durante el final std::vector sprite_list_; // Lista con todos los sprites a dibujar std::vector colors_; // Vector con los colores para el fade int sprite_max_width_; // El valor de ancho del sprite mas ancho int sprite_max_height_; // El valor de alto del sprite mas alto int dist_sprite_text_; // Distancia entre el sprite y el texto que lo acompaña int dist_sprite_sprite_; // Distancia entre dos sprites de la misma columna float sprite_desp_speed_; // Velocidad de desplazamiento de los sprites // Actualiza el objeto void update(); // Dibuja el final en pantalla void render(); // Comprueba el manejador de eventos void checkEvents(); // Comprueba las entradas void checkInput(); // Actualiza los contadores void updateCounters(); // Inicializa la lista de sprites void iniSpriteList(); // Carga todos los sprites desde una lista void loadSprites(); // Actualiza los sprites void updateSprites(); // Actualiza los sprites de texto void updateTextSprites(); // Actualiza los sprites de texto del final void updateTexts(); // Dibuja los sprites void renderSprites(); // Dibuja los sprites con el texto void renderSpriteTexts(); // Dibuja los sprites con el texto del final void renderTexts(); // Coloca los sprites en su sito void placeSprites(); // Crea los sprites con las texturas con los textos void createSpriteTexts(); // Crea los sprites con las texturas con los textos del final void createTexts(); // Actualiza el fade final void updateFinalFade(); // Actualiza el volumen de la musica void updateMusicVolume(); public: // Constructor Ending2(); // Destructor ~Ending2() = default; // Bucle principal void run(); };