#pragma once #include // Para Uint32, SDL_FRect #include // Para array #include // Para basic_string, string #include "color.h" // Para Color, NotifyPosition (ptr only), Zone #include "utils.h" // --- Parámetros del juego --- struct ParamGame { float width; // Ancho de la resolución nativa del juego float height; // Alto de la resolución nativa del juego float item_size; // Tamaño de los ítems del juego Zone play_area; // Rectángulo con la posición de la zona de juego Zone game_area; // Rectángulo con las dimensiones del juego int name_entry_idle_time; // Segundos para introducir el nombre al finalizar la partida si no se pulsa nada int name_entry_total_time; // Segundos totales para introducir el nombre al finalizar la partida Uint32 speed; // Velocidad a la que transcurre el juego bool hit_stop; // Indica si debe haber un paro cuando el jugador es golpeado por un globo Uint32 hit_stop_ms; // Cantidad de milisegundos que dura el hit_stop }; // --- Parámetros del fade --- struct ParamFade { Color color; // Color del fade float num_squares_width; // Cantidad total de cuadraditos en horizontal para el FadeType::RANDOM_SQUARE float num_squares_height; // Cantidad total de cuadraditos en vertical para el FadeType::RANDOM_SQUARE int random_squares_delay; // Duración entre cada pintado de cuadrados int random_squares_mult; // Cantidad de cuadrados que se pintarán cada vez int post_duration; // Duración final del fade float venetian_size; // Altura de los rectángulos para FadeType::VENETIAN }; // --- Parámetros de la pantalla de título --- struct ParamTitle { int press_start_position; // Posición del texto para empezar a jugar int title_duration; // Tiempo de inactividad del título int arcade_edition_position; // Posición del bitmap "Arcade Edition" int title_c_c_position; // Posición del bitmap "Coffee Crisis" Color bg_color; // Color para los tiles de fondo }; // --- Parámetros del fondo --- struct ParamBackground { Color attenuate_color; // Color para atenuar el fondo }; // --- Parámetros de los globos --- struct ParamBalloon { struct Settings { float grav; // Aceleración en el eje Y. Modifica la velocidad float vel; // Velocidad inicial al rebotar contra el suelo // Constructor explicit Settings(float grav_val = 0.0F, float vel_val = 0.0F) : grav(grav_val), vel(vel_val) {} }; std::array settings; std::array color; bool bouncing_sound; // Indica si los globos hacer sonido al rebotar }; // --- Parámetros de las notificaciones --- struct ParamNotification { NotifyPosition pos_h; // Ubicación horizontal de las notificaciones en pantalla NotifyPosition pos_v; // Ubicación vertical de las notificaciones en pantalla bool sound; // Indica si las notificaciones suenan Color color; // Color de las notificaciones }; // --- Parámetros del marcador --- struct ParamScoreboard { SDL_FRect rect; // Posición y tamaño del marcador bool separator_autocolor; // El separado establece su color de forma automatica Color separator_color; // Color del separador si se pone de forma manual Color easy_color; // Color del marcador segun la dificultad Color normal_color; // Color del marcador segun la dificultad Color hard_color; // Color del marcador segun la dificultad bool text_autocolor; // El texto establece su color de forma automatica Color text_color1; // Color del texto Color text_color2; // Color del texto int skip_countdown_value; // Valor a partir del cual se puede saltar la cuenta atras }; // --- Parámetros del menú de servicio --- struct ParamServiceMenu { Color title_color; Color text_color; Color selected_color; Color bg_color; bool drop_shadow; }; // --- Parámetros de la intro --- struct ParamIntro { Color bg_color; Color card_color; Color shadow_color; int text_distance_from_bottom; }; // --- Parámetros para Debug --- struct ParamDebug { Color color; }; // --- Parámetros para Resource --- struct ParamResource { Color color; }; // --- Estructura principal para almacenar todos los parámetros del juego --- struct Param { ParamGame game; // Parámetros del juego ParamFade fade; // Parámetros del fade ParamScoreboard scoreboard; // Rectángulo del marcador ParamTitle title; // Parámetros de la pantalla de título ParamBackground background; // Parámetros del fondo ParamBalloon balloon; // Parámetros de los globos ParamNotification notification; // Parámetros de las notificaciones ParamServiceMenu service_menu; // Parámetros del menú de servicio ParamIntro intro; // Parámetros de la intro ParamDebug debug; // Parámetros para Debug ParamResource resource; // Parámetros para Resource // Constructor Param() : game(), fade(), scoreboard(), title(), background(), balloon(), notification(), service_menu(), intro(), debug(), resource() {} }; // --- Variable global con los parámetros del juego --- extern Param param; // --- Funciones globales --- void loadParamsFromFile(const std::string &file_path); // Establece valores para los parámetros a partir de un fichero de texto