113 lines
5.4 KiB
C++
113 lines
5.4 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL_rect.h> // Para SDL_Rect
|
|
#include <SDL3/SDL_render.h> // Para SDL_Texture
|
|
#include <SDL3/SDL_stdinc.h> // Para Uint32
|
|
#include <memory> // Para unique_ptr, shared_ptr
|
|
#include <vector> // 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<BalloonManager> 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<TiledBG> tiled_bg_; // Objeto para dibujar el mosaico animado de fondo
|
|
std::unique_ptr<Fade> fade_in_; // Objeto para realizar el fundido de entrada
|
|
std::unique_ptr<Fade> fade_out_; // Objeto para realizar el fundido de salida
|
|
std::vector<std::shared_ptr<Player>> 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();
|
|
}; |