#pragma once #include // Para SDL_FRect #include // Para SDL_Texture #include // Para Uint32 #include // Para unique_ptr, shared_ptr #include // Para vector #include "options.h" // Para Options, OptionsAudio, OptionsMusic #include "param.h" // Para Param, ParamGame, param #include "utils.h" // Para Zone class BalloonManager; // lines 8-8 class Fade; // lines 11-11 class Player; // lines 10-10 class TiledBG; // lines 9-9 constexpr int PLAY_AREA_HEIGHT = 200; class Credits { private: // Objetos std::unique_ptr balloon_manager_; // Objeto para gestionar los globos SDL_Texture *text_texture_; // Textura con el texto SDL_Texture *canvas_; // Textura donde dibujarlo todo std::unique_ptr tiled_bg_; // Objeto para dibujar el mosaico animado de fondo std::unique_ptr fade_in_; // Objeto para realizar el fundido de entrada std::unique_ptr fade_out_; // Objeto para realizar el fundido de salida std::vector> players_; // Vector con los jugadores // Variables Uint32 ticks_ = 0; // Contador de ticks para ajustar la velocidad del programa Uint32 counter_ = 0; // Contador para la lógica de la clase Uint32 counter_pre_fade_ = 0; // Contador para activar el fundido final Uint32 counter_prevent_endless_ = 0; // Contador para evitar que el juego se quede para siempre en los creditos int black_bars_size_ = (param.game.game_area.rect.h - PLAY_AREA_HEIGHT) / 2; // Tamaño de las barras negras int mini_logo_final_pos_ = 0; // Ubicación donde se detiene el minilogo bool fading_ = false; // Indica si se está realizando el fade final bool want_to_pass_ = false; // Indica si el jugador quiere saltarse los titulos de crédito bool mini_logo_on_position_ = false; // Indica si el minilogo ya se ha quedado en su posición int initial_volume_ = options.audio.music.volume; // Volumen actual al crear el objeto int steps_ = 0; // Cantidad de pasos a dar para ir reduciendo el audio // Rectangulos SDL_FRect credits_rect_src_ = param.game.game_area.rect; // Rectangulo con el texto de los créditos (origen) SDL_FRect credits_rect_dst_ = param.game.game_area.rect; // Rectangulo con el texto de los créditos (destino) SDL_FRect mini_logo_rect_src_ = param.game.game_area.rect; // Rectangulo con el mini logo de JailGames y el texto de copyright (origen) SDL_FRect mini_logo_rect_dst_ = param.game.game_area.rect; // Rectangulo con el mini logo de JailGames y el texto de copyright (destino) SDL_FRect play_area_ = { param.game.game_area.rect.x, param.game.game_area.rect.y + black_bars_size_, param.game.game_area.rect.w, PLAY_AREA_HEIGHT}; // Area visible para los creditos SDL_FRect top_black_rect_ = {play_area_.x, param.game.game_area.rect.y, play_area_.w, black_bars_size_}; // Rectangulo negro superior SDL_FRect bottom_black_rect_ = {play_area_.x, param.game.game_area.rect.h - black_bars_size_, play_area_.w, black_bars_size_}; // Rectangulo negro inferior SDL_FRect left_black_rect_ = {play_area_.x, param.game.game_area.center_y - 1, 0, 2}; // Rectangulo negro situado a la izquierda SDL_FRect right_black_rect_ = {play_area_.x + play_area_.w, param.game.game_area.center_y - 1, 0, 2}; // Rectangulo negro situado a la derecha SDL_FRect red_rect = play_area_; // Rectangulo rojo para delimitar la ventana // Actualiza las variables void update(); // Dibuja en pantalla void render(); // Comprueba el manejador de eventos void checkEvents(); // Comprueba las entradas void checkInput(); // Crea la textura con el texto void fillTextTexture(); // Dibuja todos los sprites en la textura void fillCanvas(); // Actualiza el destino de los rectangulos de las texturas void updateTextureDstRects(); // Tira globos al escenario void throwBalloons(); // Inicializa los jugadores void initPlayers(); // Actualiza los rectangulos negros void updateBlackRects(); // Actualiza el rectangulo rojo void updateRedRect(); // Actualiza el estado de fade void updateAllFades(); // Establece el nivel de volumen void setVolume(int amount); // Reestablece el nivel de volumen void resetVolume(); // Cambia el color del fondo void cycleColors(); public: // Constructor Credits(); // Destructor ~Credits(); // Bucle principal void run(); };